爬蟲提取標籤的幾種方式
阿新 • • 發佈:2019-02-20
我最喜歡用兩種解析方式
#第一種解析方式 etree+xpath 提取匹配標籤 a = "<div class='a'>123<p>1455555</p></div>" from lxml import etree con = etree.HTML(a) print(con) print(con.xpath("//div/text()")) print(con.xpath("//div/p/text()")) print(con.xpath("//div//text()")) # 輸出結果: ['123'] ['1455555'] ['123', '1455555'] # 第二種提取標籤的方式 Selector +css 提取 from scrapy import Selector a = "<div class='a'>123<p>1455555</p></div>" con = Selector(text=a) print(con) print(con.xpath("//div/text()").extract()) print(con.xpath("//div/p/text()").extract()) print(con.xpath("//div//text()").extract()) # 輸出結果: <Selector xpath=None data='<html><body><div class="a">123<p>1455555'> ['123'] ['1455555'] ['123', '1455555'] # string(.)的用法 b = con.xpath("//div") # 獲取標籤下面的所有的字元 print(b.xpath("string(.)")) # 輸出結果: [<Selector xpath='string(.)' data='1231455555'>]
當然還有其他的提取方式,比如說re,css, bs4, pyputer 等等等等, 個人對xpath比較熟悉,所以一般情況下我會使用xpath,有的欄位麻煩的,會對提取的結果用一個正則表示式來獲取想要的文字。
requests請求的特殊幾種獲取方式處理
# requests預設使用application/x-www-form-urlencoded對POST資料編碼。如果要傳遞JSON資料,可以直接傳入json引數: url = "https://123456.com" params = {'key': 'value'} r = requests.post(url, json=params) # 內部自動序列化為JSON # 要在請求中傳入Cookie,只需準備一個dict傳入cookies引數: cs = {'token': '12345', 'status': 'working'} r2 = requests.get(url, cookies=cs)