Python新手入门,但仍在线自学等。
我正在尝试构建一个漂亮的网页爬行器,到目前为止,我已经找到了页面上我想要抓取和打印的元素,但在测试第一个元素时,它只打印空括号,而不是我需要的站点上的html/text。
以下是到目前为止的代码:
from bs4 import BeautifulSoup
import requests
source = requests.get('https://www.expireddomains.co.nz/search.php?action=search&status=6&results_per_page=100&page=2')
soup = BeautifulSoup (source.text, 'html.parser')
elems = soup.select('body > table > tbody > tr > td:nth-child(3) > div.PageTabsBox > form:nth-child(4) > table.DomainList > tbody > tr:nth-child(2) > td:nth-child(2) > a')
print(elems)任何帮助都将不胜感激。
发布于 2020-01-17 10:35:28
尝尝这个。
from simplified_scrapy.request import req
from simplified_scrapy.simplified_doc import SimplifiedDoc
url = 'https://www.expireddomains.co.nz/search.php?action=search&status=6&results_per_page=100&page=2'
html = req.get(url)
doc = SimplifiedDoc(html)
table = doc.getElement('TABLE',attr='class',value='DomainList')
trs = table.TRs
for tr in trs:
# print ([td.text for td in tr.children])
pass
elems = trs[1].children[1].a
print(elems)
print(doc.absoluteUrl(url,elems.href))结果:
{'href': '/register.php?domain_id=2201986', 'tag': 'a', 'html': 'academyoflearning.co.nz'}
https://www.expireddomains.co.nz/register.php?domain_id=2201986您可以获得SimplifiedDoc here的示例
发布于 2020-01-18 18:19:24
这将抓取子节点的所有链接。
from bs4 import BeautifulSoup
import requests
source = requests.get('https://www.expireddomains.co.nz/search.php?action=search&status=6&results_per_page=100&page=2')
soup = BeautifulSoup (source.text, 'html.parser')
Link = []
div = soup.find('div', {'class': 'PageTabsBox'})
TR = div.findAll('tr')
for tr in TR:
TD = tr.findAll('td')
for td in TD:
try:
link = td.find('a')
link = link['href']
Link.append(link)
except:
continue
print(Link)
print(Link[6])发布于 2020-01-18 23:30:51
这假设您使用的是BeautifulSoup 4.7+,它具有改进的选择库。
我想回答为什么,你所做的事情没有起作用,然后向你展示如何轻松地让它起作用。
你的代码不能工作的原因有几个。当您在浏览器中检查HTML时,它有时会向您显示解析器可以自由修改的HTML,以满足它认为您的意图,并为您提供更合适的HTML。例如,当您请求原始的HTML时,没有tbody标记,但在浏览器中,它会自动插入它,因为它更合适。
如果在原始超文本标记语言中找不到,html.parser不会插入tbody。如果您希望在BeautifulSoup中完成此操作,则需要安装html5lib并使用该解析器soup = BeautifulSoup (source.text, 'html5lib')。
有时,当我遇到意想不到的解析器问题时,我会将soup对象的内容打印到一个单独的文件中,这样我就可以分析与我在浏览器中查看时预期的内容不同的内容。
因此,假设我们仍然在使用html.parser,让我们简化我们的select,也不要寻找tbody。
from bs4 import BeautifulSoup
import requests
source = requests.get('https://www.expireddomains.co.nz/search.php?action=search&status=6&results_per_page=100&page=2')
soup = BeautifulSoup (source.text, 'html.parser')
elems = soup.select('table.DomainList > tr:nth-child(2) > td:nth-child(2) > a')
print(elems)输出
[<a href="/register.php?domain_id=2196993">absca.co.nz</a>] https://stackoverflow.com/questions/59772218
复制相似问题