大概思路:首先利用requests库获取京东商品搜索的页面信息,然后利用pyquery库对爬取的数据进行分析,然后利用格式化输出的方法输出所爬取的数据。
1.我们要爬取的页面信息为进入京东页面后输入关键词搜索之后的页面,获取的信息为商品的标题和商品的价格,以手机为例,URL为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&
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]))