日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python菜鸟爬虫技巧

發布時間:2024/1/8 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python菜鸟爬虫技巧 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

python菜鳥爬蟲技巧

環境配置安裝

  • 首先去官網python.org下載好python。
    下載完畢后win+R,輸入cmd命令,在終端下輸入python -V出現如下信息表示安裝成功。
  • 輸入命令pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests安裝清華園request包。
    安裝成功后,把request換成lxml 安裝lxml包。
    同時PC環境變量中PATH路徑添加好相關環境變量(兩個,包括python和python script)
  • 代碼編寫

  • 進入PyCharm編輯器,編寫代碼。進入瀏覽器,選擇你想要爬取的網頁,打開開發者工具,選擇
    網絡(Network) —> 請求標頭(Request Headers) —>User-Agent
  • 把相關信息在PyCharm中輸入,可以在控制臺獲得你想要的信息。
    代碼:
  • import requests 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)

    B站的加密措施很好,這樣簡陋的代碼只能獲取如下信息:

  • 網頁源代碼是字符串,且很多很雜無法提取數據,導入lxml包調用lxml方法可以把它轉換成對象(對象有屬性有方法)用方法提取。
  • #提取想要數據需要使用lxml ,直接引用lxml模塊下的etree from lxml import etree obj = etree.HTML(response.text) print(obj)

    可以看到控制臺輸出了如下信息:

    得到的該對象說明網頁元素存儲在計算機這塊地址中。接下來開發者工具選擇Elements選項,這里有很多HTML語言,我們把鼠標懸停在上面層次的搜索(一般head跳過在body找),獲取我們想要的板塊內容。在里面一層一層的尋找div,最后print求一下最后一層div的長度,檢查是否層次書寫正確??刂婆_返回len得到的值為12。

    #用xpath解析器解析網頁元素 item=obj.xpath('.//body/div[2]/div[1]/div[2]/div[1]/div[2]/div') print(len(item))

    控制臺輸出了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菜鸟爬虫技巧的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。