首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Web抓取返回空方括号

Web抓取返回空方括号
EN

Stack Overflow用户
提问于 2020-01-16 22:52:13
回答 3查看 452关注 0票数 0

Python新手入门,但仍在线自学等。

我正在尝试构建一个漂亮的网页爬行器,到目前为止,我已经找到了页面上我想要抓取和打印的元素,但在测试第一个元素时,它只打印空括号,而不是我需要的站点上的html/text。

以下是到目前为止的代码:

代码语言:javascript
运行
复制
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)

任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

发布于 2020-01-17 10:35:28

尝尝这个。

代码语言:javascript
运行
复制
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))

结果:

代码语言:javascript
运行
复制
{'href': '/register.php?domain_id=2201986', 'tag': 'a', 'html': 'academyoflearning.co.nz'}
https://www.expireddomains.co.nz/register.php?domain_id=2201986

您可以获得SimplifiedDoc here的示例

票数 0
EN

Stack Overflow用户

发布于 2020-01-18 18:19:24

这将抓取子节点的所有链接。

代码语言:javascript
运行
复制
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])
票数 0
EN

Stack Overflow用户

发布于 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

代码语言:javascript
运行
复制
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)

输出

代码语言:javascript
运行
复制
[<a href="/register.php?domain_id=2196993">absca.co.nz</a>] 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59772218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档