python的pyppeteer的爬虫demo

python的pyppeteer的爬虫demo,第1张

概述目标网站是药物临床试验登记平台思路:尝试requests库直接获取该网站的response,失败,因为该网站返回202,需要破解js;然后尝试用chromedriver驱动获取网页数据,失败,因为被识别为恶意爬虫;然后找到了pyppeteer库进行尝试,成功贴代码:importasyncioimportrandomfrompyppeteeri

目标网站是药物临床试验登记平台

思路:尝试requests库直接获取该网站的response,失败,因为该网站返回202,需要破解Js;然后尝试用Chrome driver驱动获取网页数据,失败,因为被识别为恶意爬虫;然后找到了pyppeteer库进行尝试,成功

贴代码:

import asyncioimport randomfrom pyppeteer import launchfrom pyppeteer.network_manager import Responseclass pyppeteerScript(object):    """    pyppeteer    """    def __init__(self):        self.base_url = "http://www.chinadrugtrials.org.cn/clinicaltrials.searchListdetail.dHTML"        # 从第几个开始爬取        self.current_page = 13480        # 可爬取的最大实验数 退出的条件        self.page_limit = 13483        self.config = {@H_404_14@            # 无头浏览器设置 显示网页            "headless": False,            # 本地Chromium路径 镜像下载:https://npm.taobao.org/mirrors/chromium-browser-snapshots/            "executablePath": "/Users/xxx/Downloads/chromium/Chromium.app/Contents/MacOS/Chromium",            #  *** 作后的延迟时间 防止检测            "slowMo": 5,            # 配置参数            "args": [                # 关闭自动化提示框                "--disable-infobars",                # 关闭沙盒模式                "--no-sandBox",                # 代理 PS:每次需要更换代理就需要重新通过launch方法来启动浏览器                # "--proxy-server=http://ip:port",                # 取消显示正在受控制的bars                "--disable-infobars",            ]        }    async def intercept_response(self, res: Response):        Json_text = await res.text()        print(Json_text)    def __save_HTML(self, content, name):        with open("./HTML/{}.HTML".format(name), "w+", enCoding="utf-8") as f:            f.write(content)    async def run(self):        """        入口函数        """        browser = await launch(**self.config)        page = await browser.newPage()        await page.setVIEwport({@H_404_14@'wIDth': 1920, 'height': 1080})        await page.setUserAgent(            'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'        );        # 混淆识别Js代码 防止被识别        Js_text = """            () =>{                 Object.definePropertIEs(navigator,{ webdriver:{ get: () => false } });                window.navigator.Chrome = { runtime: {},  };                Object.defineProperty(navigator, 'languages', { get: () => ['en-US', 'en'] });                Object.defineProperty(navigator, 'plugins', { get: () => [1, 2, 3, 4, 5,6], });            }            """        await page.evaluateOnNewdocument(Js_text)        await page.goto(url=self.base_url)        # 等待网页加载(second)        await asyncio.sleep(5)        while True:            if self.current_page > self.page_limit:                break            # 执行翻页的Js函数            turn_page_Js = "gotopage({})".format(self.current_page)            await page.evaluate(turn_page_Js)            await asyncio.sleep(random.randint(2, 4))            self.current_page += 1            # 获取网页源码            page_text = await page.content()            page_Title = await page.Title()            self.__save_HTML(content=page_text, name=page_Title)            # 没有XHR请求 不会响应response 不能直接获取Json            # await page.setRequestInterception(True)            # page.on('response', self.intercept_response)        await browser.close()if __name__ == '__main__':    asyncio.get_event_loop().run_until_complete(pyppeteerScript().run())

PS:该代码仅供学习交流,请勿用于其他商业用途

总结

以上是内存溢出为你收集整理的python的pyppeteer的爬虫demo全部内容,希望文章能够帮你解决python的pyppeteer的爬虫demo所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

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

原文地址: http://outofmemory.cn/langs/1185111.html

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

发表评论

登录后才能评论

评论列表(0条)

保存