网络爬虫pyppeteer、selenium模拟浏览器抓取数据

项目场景:

1、抓取数据时,响应状态码为412,即状态码412含义为:Precondition Failed,服务器在验证在请求的头字段中给出先决条件时,没能满足其中的一个或多个。这个状态码允许客户端在获取资源时在请求的元信息(请求头字段数据)中设置先决条件。

2、加请求头所有参数,依旧返回412


问题描述

遇到的问题:

  1、pyppeteer、selenium在无头模式下,返回无数据状态

  2、抓取数据,返回错误数据状态


原因分析:

问题的分析:网站对模拟浏览器抓取有限制

无头模式下,需绕过检测,即程序中加入所需参数


解决方案:

解决方案:

1、selenium模拟浏览器抓取:

option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_argument('--disable-blink-features=AutomationControlled')  # 无头模式,防检测

2、pyppeteer模拟浏览器抓取:

await launch(
#         {"executablePath": browser_path, "ignoreHTTPSErrors": True, "headless": True, "dumpio": True,
#          "args": [
#              "--start-maximized",
#              "--no-sandbox",
#              # '--disable-blink-features=AutomationControlled'   # 新版谷歌浏览器,绕过检测参数配置
#          ]}
option = webdriver.ChromeOptions()
option.add_argument('--headless')
option.add_argument('--disable-blink-features=AutomationControlled')  # 无头模式,防检测
option.add_argument('window-size=1920x1080')
option.add_argument('log-level=3')
option.add_argument("--user-agent=*****")
option.add_argument("--disable-dev-shm-usage")
option.add_argument("--no-sandbox")
option.add_argument("lang=zh_CN.UTF-8")
option.add_argument('--disable-gpu')
option.add_argument('--incognito')
option.add_argument("--window-size=1920,1050")  # 专门应对无头浏览器中不能最大化屏幕的方案
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=option)  # 把参数配置设置到浏览器中
driver.get(url)
time.sleep(1)
pageSource = driver.page_source
print(pageSource)
#     browser = await launch(
#         {"executablePath": browser_path, "ignoreHTTPSErrors": True, "headless": True, "dumpio": True,
#          "args": [
#              "--start-maximized",
#              "--no-sandbox",
#              # '--disable-blink-features=AutomationControlled'   # 新版谷歌浏览器,绕过检测参数配置
#          ]}
#     )
#     page = await browser.newPage()
#     try:
#         await page.setUserAgent(
#             "*****")
#         await page.goto(url)
#         await page.waitFor(2000)
#         page_text = await page.content()
#         await browser.close()
#         print(page_text)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值