gpt4 book ai didi

python - 无法使用 beautifulsoup 检索 标记 href(以 "?"而不是 http/s 开头)

转载 作者:行者123 更新时间:2023-11-27 23:37:32 25 4
gpt4 key购买 nike

这是我第一次网络抓取,我正在尝试网络抓取,只有以下网站的页面 (1-...):

http://jobs.monster.com/search/?q=data%20science

使用 python beautifulsoup,但它似乎无法识别页面的标签。标签看起来像这样:

<a href="?q=data-science&amp;page=1" class="page-link">1</a>

我的部分代码如下所示:

import urlparse
import urllib
import re
from bs4 import BeautifulSoup

# start with this page
url = "http://jobs.monster.com/search/?q=data%20science"
#http://jobs.monster.com/search/?q=data%20science&page=2

# stack of urls from nytimes
urls = [url]
#print urls

# visited urls
visited = [url]

while len(urls) > 0:
try:
htmltext = urllib.urlopen(urls[0]).read()
except:
print urls[0]

soup = BeautifulSoup(htmltext)


urls.pop(0)

for tag in soup.find_all('a', {'class':'page-link'}):
print tag

我没有收到任何错误,但也没有打印出任何内容...我猜这是因为 href 不是以 http/s 开头?

有人能帮忙吗?

谢谢

最佳答案

问题是当您的站点加载 urllib 时,它不包含类 page-link 的 anchor 。

无论您在浏览器中看到什么。这是因为 JavaScript 创建了指向下一个站点的页面链接。如果您使用具有良好开发工具的浏览器(我使用 Chrome),您可以禁用网站上的 JavaScript 执行。如果您这样做并再次加载网站,您将看到分页消失。

但要解决您的问题,您可以提取职位结果计数并根据此值创建 URL 列表:每个站点显示 20 个职位发布。您可以将结果计数除以 20,看看您需要抓取多少页。当然,这仅适用于结果低于 1000 的搜索。超过 1000 个结果只会显示“1000+ 个结果”,因此您无法真正计算页面数量。

但是,如果您仔细查看加载页面的源代码,您可以找到创建分页的 JavaScript 标记。这包括您可以用来创建要抓取的 URL 列表的页面总数。当然,这将包括一些文本解析,但如果您投入一些时间,您可以找到一种方法来进行解析。

如果您有足够的页面,您可以创建一个循环(或生成器)并将您的注释行用于下一个 url:

for p in range(2,page_count+1):
url = "http://jobs.monster.com/search/?q=data%20science&page="+str(p)

urls = ["http://jobs.monster.com/search/?q=data%20science&page="+str(p) for p in range(2, page_count+1)]

循环从 2 开始,因为您已经拥有第一个站点,因此无需再次加载它。

关于python - 无法使用 beautifulsoup 检索 <a> 标记 href(以 "?"而不是 http/s 开头),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33159895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com