爬取簡單反爬蟲網站實戰


實戰一,爬取京東商品


import requests

url = "https://item.jd.com/27217068296.html"

try:
    r = requests.get(url)
    r.raise_for_status()    #獲取爬取失敗異常
    r.encoding = r.apparent_encoding
    print(r.text[:1000])
except:
    print("爬取失敗")

結果:

實戰二,爬取亞馬遜


  • URL更為復雜
  • 有一定的反爬蟲措施
import requests

url = "https://www.amazon.cn/dp/B07746N2J9/459-3461623-5096824?_encoding=UTF8&pf_rd_i=desktop&pf_rd_m=A1AJ19PSB66TGU&pf_rd_p=64065c3b-d3b2-4b04-b0ae-f565f28d2a3e&pf_rd_r=7W3EH45JP9MRMY040XR2&pf_rd_s=Tcg-slide-1&pf_rd_t=36701&ref_=p-Tcg-slide-1--cb755e89-28c8-4498-81e4-3ff3328e7310"

try:
    r = requests.get(url)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text[:1000])
except:
    print("爬取失敗")

結果:

  • 檢查狀態編碼和返回的信息:

  • 可以從服務器獲得信息,說明不是網絡的問題。可能是亞馬遜對網絡爬蟲加以限制,所以我們來查看我們給亞馬遜服務器發送請求的頭部信息:
  • 請注意,服務器返回給我們的頭部信息用r.headers查看,查看我們給服務器請求的頭部信息要用r.request.headers來查看:

  • 找到了問題所在,原來我們的程序很誠實的告訴了亞馬遜服務器,我是一個python requests程序產生的訪問,所以被拒絕。
  • 所以我們要讓我們的程序模仿瀏覽器的訪問。沒錯,我們要用到可選字段中的headers

  • 查看我們給服務器請求的頭部信息:

  • 查看返回的網頁信息:

  • 貼出全部代碼:
import requests

url = "https://www.amazon.cn/dp/B07746N2J9/459-3461623-5096824?_encoding=UTF8&pf_rd_i=desktop&pf_rd_m=A1AJ19PSB66TGU&pf_rd_p=64065c3b-d3b2-4b04-b0ae-f565f28d2a3e&pf_rd_r=7W3EH45JP9MRMY040XR2&pf_rd_s=Tcg-slide-1&pf_rd_t=36701&ref_=p-Tcg-slide-1--cb755e89-28c8-4498-81e4-3ff3328e7310"
kv = { 'user-agent' : 'Mozilla/5.0' }

try:
    r = requests.get(url,headers = kv)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text[:3000])
except:
    print("爬取失敗")


免責聲明!

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



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