使用BeautifulSoup获取disboard.org指定div内href链接时返回None的问题
解决Disboard服务器链接抓取返回None的问题
首先,咱们来揪出问题的根源:你定位的div.server-name元素本身并不包含href属性——这个链接属性其实是嵌套在该div内部的<a>标签上的。所以直接对div调用get('href'),自然会返回一串None。
修正后的代码示例
import requests from bs4 import BeautifulSoup def scrape(): url = 'https://disboard.org/search?keyword=hacking' # 模拟浏览器请求,避免被反爬拦截(很多网站会拒绝无标识的请求) headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } response = requests.get(url, headers=headers).content soup = BeautifulSoup(response, 'html.parser') areas = soup.find_all('div', class_='server-name') for area in areas: # 定位div内部的a标签,再提取href属性 link_tag = area.find('a') if link_tag: # 加个判断避免空指针报错 print(link_tag.get('href')) scrape()
额外优化建议
- 反爬适配:Disboard有基础反爬机制,直接用
requests.get不带请求头很可能拿到空页面或验证码,所以一定要加上User-Agent模拟真实浏览器。 - 更高效的定位方式:你也可以直接定位带href的目标a标签,跳过div的中间步骤:
这种写法更直接,也能减少不必要的节点遍历。links = soup.find_all('a', href=True, class_='server-name__link') for link in links: print(link['href'])
内容的提问来源于stack exchange,提问作者dracoDevs
相关产品推荐
相关产品推荐

