【问题标题】:Python not getting text between html tagsPython没有在html标签之间获取文本
【发布时间】:2016-05-13 12:28:21
【问题描述】:

当 python 标记为 display=none 时,似乎无法找到文本,我应该怎么做才能解决这个问题?

这是我的代码

import requests
from bs4 import BeautifulSoup

r = requests.get('https://www.domcop.com/domains/great-expired-domains/')
soup = BeautifulSoup(r.text, 'html.parser')
data = soup.find('div', {'id':'all-domains'})
data.text

代码返回 []

我也尝试过使用 xpath:

from lxml import etree

data = etree.HTML(r.text)
anchor = data.xpath('//div[@id="all-domains"]/text()')

它返回相同的东西......

【问题讨论】:

    标签: python beautifulsoup python-requests lxml


    【解决方案1】:

    是的,id="all-domains" 的元素是空的,因为它要么是由浏览器中执行的 javascript 动态设置的。使用requests,您只能获得没有“动态”部分的初始 HTML 页面,可以这么说。要获取所有域,我只需遍历表行并提取域链接文本。工作样本:

    import requests
    from bs4 import BeautifulSoup
    
    r = requests.get('https://www.domcop.com/domains/great-expired-domains/',
                     headers={"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36"})
    
    soup = BeautifulSoup(r.text, 'html.parser')
    for domain in soup.select("tbody#domcop-table-body tr td a.domain-link"):
        print(domain.get_text())
    

    打印:

    u2tourfans.com
    tvadsview.com
    gfanatic.com
    blucigs.com
    ...
    twply.com
    sweethomeparis.com
    vvchart.com
    

    【讨论】:

    • 好的,谢谢!是否有任何其他 python 库可以读取此文本?
    • @Charles 你是指all-domains 元素中的文本吗?如果您仍然需要它,请通过 selenium 查看浏览器自动化。但是,我认为您可以使用答案中提供的解决方案。
    • 你的解决方案会在这种情况下做到这一点,我只是想知道。 Selenium 不应该只适用于可见对象,因为它就像浏览网页一样?
    • @Charles 你仍然可以使用selenium 获取不可见元素的文本。您将无法与此元素交互 - 单击、鼠标移动等,但由于您只需要文本 - 没关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多