利用requests庫和pyquery庫爬取指定頁數的京東商品資訊
大概思路:首先利用requests庫獲取京東商品搜尋的頁面資訊,然後利用pyquery庫對爬取的資料進行分析,然後利用格式化輸出的方法輸出所爬取的資料。
要爬取的頁面截圖為
對前幾頁的網址進行分析可觀察出相應的規律
第一頁:https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8& wq=%E6%89%8B%E6%9C%BA&pvid=76b728d7f57f43b4bb933938d08bd38c 第二頁:https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8& qrst=1&rt=1&stop=1&vt=2&wq=%E6%89%8B%E6%9C%BA&cid2=653&cid3=655&page=3&s=58&click=0 第三頁:https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8& qrst=1&rt=1&stop=1&vt=2&wq=%E6%89%8B%E6%9C%BA&cid2=653&cid3=655&page=5&s=114&click=0 第四頁:https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8& qrst=1&rt=1&stop=1&vt=2&wq=%E6%89%8B%E6%9C%BA&cid2=653&cid3=655&page=7&s=170&click=0
觀察前四頁的程式碼很容易發現他們之間的不同只是page=""的不同page頁數乘以2減一,所以我們可以設定URL=“https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8& qrst=1&rt=1&stop=1&vt=2&wq=%E6%89%8B%E6%9C%BA&cid2=653&cid3=655&page=”頁數可以設定為一個獨立的變數,這樣我們就可以自定義要爬取的頁數了。
原始碼如下:
import requests from pyquery import PyQuery as pq #因為PyQuery書寫的時候較為複雜所以用pq 代替 url='''https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8& qrst=1&rt=1&stop=1&vt=2&wq=%E6%89%8B%E6%9C%BA&cid2=653&cid3=655&page=''' num=eval(input("請輸入需要查詢結果的頁數")) #自定義頁數 for ii in range(num): url=url+str(2*ii+1) r=requests.get(url) r.encoding="utf-8" #這一行必不可少,缺少的話就會出現沒有結果的問題 html=r.text print(type(html),len(html)) text=pq(html) divs=text("div").filter(".p-name").items() #items()可以讓divs 成為可以遍歷的型別 prices=text("div").filter(".p-price").items() #items()讓pricess 成為可以遍歷的型別 print(type(divs)) print(type(prices)) name=[] price=[] t="{:^5}\t{:6}\t{:^30}" for div in divs: ems=div("a").attr("title") name.append(ems) for pricess in prices: price.append(pricess("i").text()) for i in range(len(name)): print(t.format((30*ii)+i+1,price[i],name[i]))