2016-02-04 145 views
1

它看起来像python无法找到文本时,它被标记为display = none,我该怎么办才能解决这个问题?Python没有获取html标签之间的文本

这里是我的代码

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()') 

它返回同样的事情...

回答

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 
+0

好了,感谢您的!有没有其他的Python可以读取这个文本的库? – Charles

+0

@Charles是否指'all-domains'元素中的文字?如果你仍然需要这个,通过'selenium'浏览一下浏览器自动化。但是,我认为您可以使用答案中提供的解决方案。 – alecxe

+0

您的解决方案将在这种情况下,我只是想知道。 Selenium是否仅适用于可见对象,因为它就像是在浏览网页? – Charles

相关问题