文档
安装
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(\'广告\'))
#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
}
})
}
\'\'\'
参考链接