在抓取新浪微博過程中,發現一些方法的其他用途以及自己不常用的方法,整理如下:
1. response.json()
對於requests請求的數據是Json格式的,之前都是使用**json.loads()方法解析,其實也可以使用response.json()**方法,結果是一樣的。
response = requests.get(url, params=params)
return response.json()
2. Get請求
Get請求時需要攜帶參數params,請求的的url尾部的"?"可加可不加,並沒有影響。
3. 截取H5數據
當請求URL返回的數據格式是H5形式的,但是在這其中,有我們想要的數據並且是JSON格式的,可以使用下面這種略微有些麻煩的方法:
先用str.find()和str.rfind()獲取目標數據的起始位置和結束位置,然後使用列表把這部分切出來,使用json.loads()進行轉換成dict()形式。(如果熟悉正則的話,感覺正則會更方便一些,這種方法使用場景不多)
html = requests.get(url).text()
html = html[html.find('"status:"'):]
html = html[:html.rfind('"hotSchme:"')]
html = '{' + html + '}'
js = json.loads(html, strict=False)
4. 有序字典
Python原生的字典本身是無序的,因爲是按照Hash來存儲的;但是當我們需要有序字典數據結構時,可以使用Python模塊Collections自帶的子類OrderedDict來實現。
from collections import OrderedDict
dict = OrderedDict()
5. Xpath使用情況
之前對於xpath提取只用於整個response.text(),其實,xpath並不是只適用於完整response.text(),也適用於其中某一部分。換句話說,pxath提取適用於所有包含h5格式數據的字符串str
text = weibo_info['text'].xpath('string(.)')
text是json.loads()獲取的一部分數據,不過因爲其中包含< >這種標籤(如a標籤,br標籤),所以使用xpath提取文本。
6.emumerate()方法
該函數用於將一個可遍歷的數據對象(如列表、元組和字符串)組合爲一個索引序列,同事列出數據和數據下標。
for index,value in emumerate(List):
print (index,value)
7.instance()、str.startswith()、str.endswith()
instance() ----- 判斷兩個類型是否相同
startswith ----- 檢查字符串是否是以指定字符串開頭,返回布爾值
str.endswith ----- 檢查字符串是否是以指定字符串結尾,返回布爾值