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

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

项目场景:

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)

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/915599.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存