requests_html方法,爬虫-requests-html(示例代码)

文档

安装

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

}

})

}

\'\'\'

参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值