使用BeautifulSoup提取滚动Marquee中href链接失败求助
用BeautifulSoup提取滚动Marquee内的href链接问题
问题背景
我是网页爬虫新手,正在用bs4抓取https://drugs.globalincidentmap.com/页面中滚动Marquee区域的href链接。目前已获取到Marquee对应的bs4 ResultSet元素,但无法从中提取href属性;尝试进一步遍历解析时,要么返回空列表,要么触发NoneType/KeyError/AttributeError错误。
注:用Selenium+ChromeDriver可以轻松提取链接,但速度太慢,想换bs4实现。
现有代码
能获取Marquee数据的代码
url = 'https://drugs.globalincidentmap.com/' response = requests.get(url) soup = BeautifulSoup(response.content, 'html.parser') marquee = soup.select('div', class_='h-48') print(marquee)
解析出错的代码尝试
尝试1:
for a in marquee.find_all('a', href=True): link = a.find('div', class_=':nth-child')
尝试2:
for a in marquee.find_all('a', href=True): link = a.find('div', class_='flex p-2')
问题原因与解决方法
select方法用法错误soup.select('div', class_='h-48')写法不符合CSS选择器规范,select的参数应为完整选择器字符串,正确写法是soup.select('div.h-48')。此外,select返回的是ResultSet(列表类型),不能直接调用find_all,需要先遍历列表内的元素。解析逻辑偏差
Marquee区域的href属性直接挂载在<a>标签上,无需先查找div再提取。正确逻辑是遍历选中的h-48类div,直接在其中提取带href的<a>标签属性。
修正后的代码
import requests from bs4 import BeautifulSoup url = 'https://drugs.globalincidentmap.com/' response = requests.get(url) soup = BeautifulSoup(response.content, 'html.parser') # 正确选中目标div marquee_divs = soup.select('div.h-48') # 遍历提取所有href链接 for div in marquee_divs: for a in div.find_all('a', href=True): print(a['href'])
补充说明
如果页面Marquee内容是动态加载的,requests获取的静态HTML可能不包含目标数据,此时bs4无法抓取。这种情况下可以尝试用requests-html这类轻量工具模拟JS渲染,速度比ChromeDriver快很多。
内容的提问来源于stack exchange,提问作者facepet
相关产品推荐
相关产品推荐

