Python使用selenium模拟浏览器爬取某查查数据

Python使用selenium模拟浏览器爬取某查查数据,第1张

概述    在使用爬虫爬取某查查的数据的时候,会被识别到,进行反爬限制,最后使用selenium模拟浏览器进行爬取。    这里解决办法主要使用selenium打开浏览器,模拟人 *** 作进行爬取,代码:ua='Mozilla/5.0(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(KHTML,likeGe

        在使用爬虫爬取某查查的数据的时候,会被识别到,进行反爬限制,最后使用selenium模拟浏览器进行爬取。

        这里解决办法主要使用selenium打开浏览器,模拟人 *** 作进行爬取,代码:

ua = 'Mozilla/5.0 (windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'#这里是用来隐藏d出框的,如果没有这个,某查查会d出提示框,会影响下一步 *** 作option = webdriver.ChromeOptions()prefs = {            'profile.default_content_setting_values': {                'notifications': 2            }        }option.add_experimental_option('prefs', prefs)option.add_argument('--disable-gpu')# 使用浏览器开发者模式,配置实验性功能参数option.add_experimental_option('useautomationExtension', False)option.add_experimental_option('excludeSwitches', ['enable-automation'])#这里使用无头浏览器,如果要观察整个 *** 作流程,可以将此代码注释掉option.add_argument('--headless')option.add_argument('--no-sandBox')option.add_argument('--disable-dev-shm-usage')option.add_argument('user-agent=' + ua)driver = webdriver.Chrome(executable_path="C:\Program files\Google\Chrome\Application\Chromedriver",                                  Chrome_options=option)# 修改谷歌开发者工具中的新属性window.navigator.webdriver# 在加载网页Js之前,将window.navigator.webdriver属性隐藏driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewdocument", {            "source": """                                               Object.defineProperty(navigator, 'webdriver', {                                                 get: () => undefined                                               })                                             """        })driver.get('https://www.qcc.com/')#休眠3秒time.sleep(3)#找到输入框的ID,这里通过ID定位webelement = driver.find_element_by_ID("searchkey")driver.implicitly_wait(2)# 输入文本,注意,如果搜索中文的,需要在前面加u,代表Unicode编码webelement.send_keys(u'企查查')time.sleep(2)#输入完成后,找到查找按钮,然后点击查找按钮webelement = driver.find_element_by_xpath('//*[@ID="indexSearchForm"]/div[1]/span/input')webelement.click()time.sleep(2)print driver.page_source

        整个流程就如代码所示,我这里查询的时候不需要登录就能查到需要的数据,如果是需要登录的,也是类似的原理,无法就是多走一步,先登录,然后再进行查询。这里遇到的最主要的三个问题以及解决办法如下:

        1、打开网页后,有d框影响下一步 *** 作

        解决办法:如代码中所示,影藏d框

        2、根本无法打开查询页面

        解决办法:一般是window.navigator.webdriver属性问题,我这里就是这个问题,可以先手动打开页面,查询window.navigator.webdriver属性是什么,F12打开Console,输入window.navigator.webdriver即可,这里是undefined,但是如果我们用浏览器打开,window.navigator.webdriver属性会显示是true,因此代码中将此属性隐藏。

        3、一切完毕后,发现根本没法在输入框输入查询

        解决办法:无意间发现的,基本都是搜索中文公司,无意间发现搜索英文名的公司就能打开,因此判断是需要使用Unicode编码进行搜索,因此在代码中字符串前面加个u,也可以使用三方转码工具进行转码 *** 作。

总结

以上是内存溢出为你收集整理的Python使用selenium模拟浏览器爬取某查查数据全部内容,希望文章能够帮你解决Python使用selenium模拟浏览器爬取某查查数据所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存