python - 通过 Beautiful Soup 的链接进行网页抓取
问题描述
我正在尝试抓取博客“ https://blog.feedspot.com/ai_rss_feeds/ ”并抓取其中的所有链接,以在每个抓取的链接中查找人工智能相关信息。
博客遵循一种模式——它有多个 RSS 提要,每个提要在 UI 中都有一个名为“站点”的属性。我需要获取“站点”属性中的所有链接。示例:aitrends.com、sciecedaily.com/...等。在代码中,主div有一个名为“rss-block”的类,它还有一个名为“data”的嵌套类,每个数据有几个
标签和
标签中有。href 中的值给出了要抓取的链接。我们需要在通过抓取上述结构找到的每个链接中查找与 AI 相关的文章。
我尝试了以下代码的各种变体,但似乎没有多大帮助。
import requests
from bs4 import BeautifulSoup
page = requests.get('https://blog.feedspot.com/ai_rss_feeds/')
soup = BeautifulSoup(page.text, 'html.parser')
class_name='data'
dataSoup = soup.find(class_=class_name)
print(dataSoup)
artist_name_list_items = dataSoup.find('a', href=True)
print(artist_name_list_items)
我什至很难获得该页面中的链接,更不用说通过这些链接中的每一个来抓取其中与 AI 相关的文章了。
如果你能帮助我完成问题的两个部分,那对我来说将是一个很好的学习。有关 HTML 结构,请参阅https://blog.feedspot.com/ai_rss_feeds/的来源。提前致谢!
解决方案
如您在页面上看到的,前 20 个结果存储在 html 中。其他是从脚本标签中提取的,您可以对它们进行正则表达式以创建 67 的完整列表。然后循环该列表并向那些发出请求以获取更多信息。我为初始列表填充提供了两种不同的选择器(第二个 - 被注释掉 - 使用:contains
- 可用于 bs4 4.7.1+)
from bs4 import BeautifulSoup as bs
import requests, re
p = re.compile(r'feed_domain":"(.*?)",')
with requests.Session() as s:
r = s.get('https://blog.feedspot.com/ai_rss_feeds/')
soup = bs(r.content, 'lxml')
results = [i['href'] for i in soup.select('.data [rel="noopener nofollow"]:last-child')]
## or use with bs4 4.7.1 +
#results = [i['href'] for i in soup.select('strong:contains(Site) + a')]
results+= [re.sub(r'\n\s+','',i.replace('\\','')) for i in p.findall(r.text)]
for link in results:
#do something e.g.
r = s.get(link)
soup = bs(r.content, 'lxml')
# extract info from indiv page
推荐阅读
- redirect - OctoberCMS 获取 CMS 页面的 URL
- asp.net-core - 不记名令牌仅在浏览没有“www”的站点时有效。
- javascript - 使用 javascript 创建 HTML 元素?
- image-processing - 如何使用 HSV 获得最小的颜色轮廓?
- python - 根据非连续整数,字符和浮点数在python中拆分字符串
- c# - Store 没有实现 IUserRoleStore
用户管理器 .GetUserRoleStore() ASP.NET Core MVC 3 - mysql - Mysql加入按列分组以删除重复但仍返回行数据
- wordpress - 具有给定设计的 wp_posts 没有正确重复
- c# - 如何在 Telerik 的 RadCartesianChart 的工具提示中显示不受 CategoryPath 或 ValuePath 约束的值?
- string - 如何使用移位从 MIPS32 程序集中的 4 字节字符串中删除字符?