Python菜鸟爬虫技巧
python菜鳥爬蟲技巧
環境配置安裝
下載完畢后win+R,輸入cmd命令,在終端下輸入python -V出現如下信息表示安裝成功。
安裝成功后,把request換成lxml 安裝lxml包。
同時PC環境變量中PATH路徑添加好相關環境變量(兩個,包括python和python script)
代碼編寫
網絡(Network) —> 請求標頭(Request Headers) —>User-Agent
代碼:
B站的加密措施很好,這樣簡陋的代碼只能獲取如下信息:
可以看到控制臺輸出了如下信息:
得到的該對象說明網頁元素存儲在計算機這塊地址中。接下來開發者工具選擇Elements選項,這里有很多HTML語言,我們把鼠標懸停在上面層次的搜索(一般head跳過在body找),獲取我們想要的板塊內容。在里面一層一層的尋找div,最后print求一下最后一層div的長度,檢查是否層次書寫正確??刂婆_返回len得到的值為12。
控制臺輸出了12:
而開發者工具顯示該層次中div的數量的確是12個,說明書寫正確。
另外,我們可以引用標簽的id進行更簡便的搜查,而不是死板的從最外層開始逐個書寫目錄,這樣費時又費力。代碼如下:
item1=obj.xpath('.//div[@id="reportFirst1"]/div[2]/div') print(len(item1))控制臺一樣可以返回正確的len長度:
4. 接下來就是爬取這一層div中我們需要的標題和播放量信息了。鼠標懸停在當前層的div中我們可以看到信息區域被標記出來。
左上角細節:div 的class名稱被標記出來(下圖)
接下來繼續層次的向里面查找,直到看見這一欄信息:
宏觀大圖:
在最內層div中,有兩個p標簽分別記錄了我們想要的信息。接下來在代碼中實現:
print("阿B主頁標題和播放") for i in item:try:c=i.xpath('./div[1]/a/div/p[@class="title"]')[0].textprint(c)except:passtry:d=i.xpath('./div[1]/a/div/p[@class="play"]')[0].textprint(d)except:passprint("-----------------")運行如下:
代碼中抓取和捕獲異常是必要的,因為并不是所有的信息都用p標簽封裝起來。這也是補充代碼的健壯性。
控制臺后面多輸出了兩條重復橫線就是因為某些異常捕獲后跳過了,可能是某些標簽不是p標簽因此抓取失敗導致的。
完整源碼:
import requests import lxml url='https://www.bilibili.com/' #應對反爬措施:添加請求頭 header = {#瀏覽器的標識'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36' } response=requests.get(url,headers = header) #response.status_code 狀態碼(控制臺顯示200代表連接成功,404頁面找不到) print(response.status_code) print(response.text)#提取想要數據 lxml ,直接引用lxml模塊下的etree #網頁源代碼是字符串,很多很雜無法提取數據,可以把它轉換成對象(對象有屬性有方法)用方法提取 from lxml import etree obj = etree.HTML(response.text) print(obj)#用xpath解析器解析網頁元素 item=obj.xpath('.//body/div[2]/div[1]/div[2]/div[1]/div[2]/div') print(len(item))item1=obj.xpath('.//div[@id="reportFirst1"]/div[2]/div') print(len(item1))print("阿B主頁標題和播放") for i in item:try:c=i.xpath('./div[1]/a/div/p[@class="title"]')[0].textprint(c)except:passtry:d=i.xpath('./div[1]/a/div/p[@class="play"]')[0].textprint(d)except:passprint("-----------------")——Seina—2020/7/8
總結
以上是生活随笔為你收集整理的Python菜鸟爬虫技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: untiy实现文本滚动
- 下一篇: websocket python爬虫_p