爬虫-requests-html
文档
https://cncert.github.io/requests-html-doc-cn/#/
安装
pip install requests-html
简单使用
from requests_html import HTMLSession session = HTMLSession() r = session.get(url='https://search.jd.com/Search?keyword=显卡&enc=utf-8&suggest=2.his.0.0&wq=&pvid=2abde6628c7841d78f46d8e412e04b61') goods = r.html.find('.gl-item') for i in goods: print(i.text)
Element
#首先获取一个element对象 element = r.html.find('.gl-item',first=True) #获取element里面的文本内容 str element.text #获取所有的attributes dict element.attrs #获取element的html内容 str element.html #获取element里的子element list element.find('a') #search,类似re的.*? Result print(good.search('<span class="p-{}-{}">广告</span>')) #xpath element.xpath('a')
支持js
内部使用的是pyppeteer而不是selenium,更小众,但是被反爬的概率更小
第一次调用会下载一个Chromium
#默认重新发起一次请求 r.html.render() #使用内存中的 r.html.render(reload=False) #请求完成会替换原先的r.html.html
关于使用render的基本设置
如果运行render报错
#运行下面的命令 pyppeteer-install #或者去pyppeteer的chromium_downloader.py里面去打印 print(chromiumExecutable['win64']) 根据下载地址下载,和安装地址安装(安装为上一级目录)
参数设置
session = HTMLSession( browser_args=[ '--no-sand', '--user-agent=XXXXX' ], headless=False )
如何设置有头
#默认是无头浏览器,如果想要设置成有头需要修改源码进行设置 #加上一个headless=True的默认参数 class BaseSession(requests.Session): """ A consumable session, for cookie persistence and connection pooling, amongst other things. """ def __init__(self, mock_browser : bool = True, verify : bool = True, browser_args : list = ['--no-sandbox'],headless=True): super().__init__() # Mock a web browser's user agent. if mock_browser: self.headers['User-Agent'] = user_agent() self.hooks['response'].append(self.response_hook) self.verify = verify self.__browser_args = browser_args self.__headless = headless #在修改browser的默认参数为传递进来的参数 @property async def browser(self): if not hasattr(self, "_browser"): self._browser = await pyppeteer.launch(ignoreHTTPSErrors=not(self.verify), headless=self.__headless, args=self.__browser_args) return self._browser #然后就可以正常设置有头和无头
render参数
.render(.....) **参数:** script: ''' ( ) => { js代码 js代码 } ''' #需要设置为True,否则后面无法使用r.html.page,这个是与浏览器交互的关键 keep_page(bool)
反爬
#如果是内核的话undefined,如果使用webdriver的话为True 绕过网站对webdriver的检测: ''' () =>{ Object.defineProperties(navigator,{ webdriver:{ get: () => undefined } }) } '''
参考链接
https://www.jianshu.com/p/bd828b9cf74d
相关推荐
houmenghu 2020-11-17
我心似明月 2020-11-09
oraclemch 2020-11-06
ltd00 2020-09-12
康慧欣 2020-09-10
waveclouds 2020-09-04
蓝色深海 2020-09-15
jincheng 2020-09-01
思君夜未眠 2020-08-25
取个好名字真难 2020-08-06
歆萌 2020-08-03
阳光之吻 2020-08-03
婷婷小屋 2020-07-28
solarspot 2020-07-28
MLXY 2020-07-26
dxbjfu0 2020-07-26
songbinxu 2020-07-19
83520298 2020-07-06