为何使用BeautifulSoup查找存在的元素却返回None值?
解决BeautifulSoup查找特定div返回None的问题
针对你遇到的问题,从代码和爬取逻辑上排查几个关键点:
1. 修复代理参数格式错误
你的requests.get调用中,代理参数传递方式不符合requests要求。requests的代理参数需要是字典格式,直接传入字符串会导致请求失效,返回的页面内容不符合预期,自然找不到目标div。
修改方式:
proxies = { "http": proxy, "https": proxy } page = requests.get(url + str(x), proxies=proxies, timeout=10)
2. 检查请求是否成功
每次请求后必须验证响应状态码,确认页面是否正常返回。如果返回404(页面不存在)、403(访问被拒绝)等状态,说明请求未成功,后续解析必然无效。
添加状态码检查:
page = requests.get(url + str(x), proxies=proxies, timeout=10) if page.status_code != 200: print(f"请求失败,状态码:{page.status_code},URL:{url + str(x)}") continue
3. 添加请求头模拟浏览器
TapTap这类站点有反爬机制,直接用requests默认请求头会被识别为爬虫,返回的内容可能是空白或反爬页面。添加User-Agent模拟真实浏览器请求:
headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } page = requests.get(url + str(x), proxies=proxies, headers=headers, timeout=10)
4. 确认目标元素的有效性
- 手动访问几个目标URL(比如
https://www.taptap.cn/app/12332),查看页面源代码,确认tap-image-wrapper app-info-board__img这个类名是否存在,或者元素结构是否有变化。 - 如果页面是JavaScript动态渲染的(比如图片通过AJAX加载),BeautifulSoup无法解析动态内容,此时需要改用Selenium或Playwright这类工具渲染页面后再解析。
修改后的完整代码示例
import requests from bs4 import BeautifulSoup import requests.exceptions localfile = "C:/Users/XXX/Desktop/TapTap Apps/TapTap Page 1" url = "https://www.taptap.cn/app/" username = 'XXXX' password = 'XXXX' proxy = f"https://{username}:{password}@someproxysite.com" proxies = { "http": proxy, "https": proxy } headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } def webScraper(url, proxies, headers, min, max): for x in range(min, max): target_url = url + str(x) try: page = requests.get(target_url, proxies=proxies, headers=headers, timeout=10) if page.status_code != 200: print(f"请求失败,状态码:{page.status_code},URL:{target_url}") continue soup = BeautifulSoup(page.content, 'lxml') image = soup.find('div', class_="tap-image-wrapper app-info-board__img") print(image) except requests.exceptions.RequestException as e: print(f"请求异常:{e},URL:{target_url}") webScraper(url, proxies, headers, 12332, 13000)
内容的提问来源于stack exchange,提问作者PolarShock
相关产品推荐
相关产品推荐

