前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >爬虫最新的库requests-html库总结

爬虫最新的库requests-html库总结

作者头像
小小咸鱼YwY
发布2020-06-19 15:47:14
9840
发布2020-06-19 15:47:14
举报
文章被收录于专栏:python-爬虫

requests-html是比较新的爬虫库,作者和requests是同一个作者

一.安装依赖

pip install requests-html

我们可以在安装的时候看到他安装了lxml,reuqests,bs4......我们常用的解析和爬取的库都分装在他里面

二. 发起请求

代码语言:javascript
复制
from requests_html import HTMLSession
session = HTMLSession()

#用法和requests.session实例化的对象用法一模一样,也会自动保存返回信息
#相比reuqests,他多了对于response.html这个属性

注意点:发默认发送的的是无头浏览器,且他如果用render调用浏览器内核

1.解决无头浏览器(针对反爬,如果没有做反爬无所谓)

修改源码

  • ctrl左键进入HTMLSession
  • 我们可以看到他是继承BaseSession
  • ctrl左键进入BaseSession 原来的源码 class BaseSession(requests.Session): def __init__(self, mock_browser : bool = True, verify : bool = True, browser_args : list = ['--no-sandbox']): super().__init__() 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 #中间没用的省略掉不是删掉 @property async def browser(self): if not hasattr(self, "_browser"): self._browser = await pyppeteer.launch(ignoreHTTPSErrors=not(self.verify), headless=True, args=self.__browser_args) return self._browser 修改后的源码 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=False): #如果你设置成True他就是无头,且你再运行render时候不会弹出浏览器 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 #中间没用的省略掉不是删掉 @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 其实我就做了个处理方便传一个headless进去

对于session重新设置

代码语言:javascript
复制
from requests_html import HTMLSession
session = HTMLSession(
browser_args=['--no-sand',
              '--user-agent='xxxxx'
             ]
)
#这样你就可以直接定义他是什么浏览器发送请求啦

2.解决浏览器内核(针对反爬,如果没有做反爬无所谓)

代码语言:javascript
复制
#利用模块进行js注入
from requests_html  import HTMLSession

session  =HTMLSession(.....)
response = session.get('https://www.baidu.com')
script='''
()=>{
Object.defineProperties(navigator,{
        webdriver:{
        get: () => undefined
        }
    })}'''
print(response.html.render(script=script))

三.response.html相关属性

这里的response对象是

代码语言:javascript
复制
from requests_html  import HTMLSession
session  =HTMLSession()
response = session.get('https://www.baidu.com')
#为了大家好理解就这个response

1.absolute_links

所有的路径都会转成绝对路径返回

2.links

返还路径原样

3.base_url

.base标签里的路径,如果没有base标签,就是当前url

4.html

返回字符串字符串内包含有标签

5.text

返回字符串字符串内不包含有标签爬取什么小说新闻之类的超级好用!

6.encoding

解码格式,注意这里是response.html的encoding,你如果只只设置了response.encoding对这个encoding毫无影响

7.raw_html

相当于r.content返回二进制

8.pq

返回PyQuery对象,个人不怎么用这个库所有不写结论

四.response.html相关方法

下面response对象我就简写成 r了

1.find

用css选择器找对象

获取全部

语法:r.html.find('css选择器')

返回值:[element对象1,。。。。。] 是个列表

只获取第一个

语法`:r.html.find('css选择器',first = True)

返回值:element对象

2.xpath

用xpath选择器找对象

获取全部

语法:r.html.xpath('xpath选择器')

返回值:[Element对象1,。。。。。] 是列表

只获取第一个

语法`:r.html.xpath('xpath选择器',first = True)

返回值:Element对象

3.search(只获取第一个)

类似用正则匹配,就是把正则里面的(.*?)变成{}

语法:r.html.search(‘模板’)

模板一:('xx{}xxx{}')

获取:获取第一个:r.html.search(‘模板’)[0]其他以此类推

模板二:(‘xxx{name}yyy{pwd}’)

获取:获取第一个:r.html.search(‘模板’)['name']其他以此类推

4.search_all(获取全部)

用法和search一样

返回值: 【result对象,result对象,】

5.render(这个我后续单独写一个总结内容有点多)

他其实就是封装了pyppeteer你如果不了解pyppeteer,那可以想想Selenium就是模拟浏览器访问

五.Element对象方法及属性

  • absolute_links:绝对url
  • links:相对url
  • text:只显示文本
  • html:标签也会显示
  • attrs:属性
  • find('css选择器')
  • xpath('xapth路径')
  • .search('模板')
  • .search_all('模板')
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.安装依赖
  • 二. 发起请求
    • 1.解决无头浏览器(针对反爬,如果没有做反爬无所谓)
      • 2.解决浏览器内核(针对反爬,如果没有做反爬无所谓)
      • 三.response.html相关属性
        • 1.absolute_links
          • 2.links
            • 3.base_url
              • 4.html
                • 5.text
                  • 6.encoding
                    • 7.raw_html
                      • 8.pq
                      • 四.response.html相关方法
                        • 1.find
                          • 2.xpath
                            • 3.search(只获取第一个)
                              • 4.search_all(获取全部)
                                • 5.render(这个我后续单独写一个总结内容有点多)
                                • 五.Element对象方法及属性
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档