爬蟲最新的庫requests-html庫總結


爬蟲最新的庫requests-html庫總結
requests-html是比較新的爬蟲庫,作者和requests是同一個作者

一.安裝依賴

pip install requests-html

我們可以在安裝的時候看到他安裝了lxml,reuqests,bs4......我們常用的解析和爬取的庫都分裝在他里面

二. 發起請求

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重新設置

from requests_html import HTMLSession
session = HTMLSession(
browser_args=['--no-sand',
              '--user-agent='xxxxx'
             ]
)
 #這樣你就可以直接定義他是什么瀏覽器發送請求啦 

2.解決瀏覽器內核(針對反爬,如果沒有做反爬無所謂)

#利用模塊進行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對象是

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('模板')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM