看看最近京东哪些产品最火,Python爬取京东的商品排行

确立需求目标

之所以写爬虫,肯定是有需求才会写,不然就没啥意义了。我们今天这个爬虫主要的任务就是,输入一个关键字,然后将京东返回的商品结果按一定的条件取得前十的商品名称和价格。知道了要干什么,就开始上干货吧。我也是一个初学者,不喜勿喷啊。

  • python3
  • urllib库
  • pyquery库

在爬取之前我们得先了解掌握python这个几个库的应用。

实战操作

第一步:

首先,我们先随便搜索一个名字,这里以电脑为例演示。通过连接,我们发现上面的域名链接里面提取到几个关键字,这个也是我们的重点,先拿到第一步的链接。

看看最近京东哪些产品最火,Python爬取京东的商品排行

 

图中我们可以看到keyword和wq后面的值都是对应我们搜索的名称,那么我们后面肯定用的到,我们下面接着分析,先来抓个包看看,F12相信大家都会用。通过观察,我们发现当我们点击搜索后,它访问的第一个链接就是最上面的链接,参数正是我们输入的关键字,返回结果是一个网页源代码,经过对比正是我们当前的页面代码。

看看最近京东哪些产品最火,Python爬取京东的商品排行

 

看看最近京东哪些产品最火,Python爬取京东的商品排行

 

第二步:

通过上面的步骤分析,我们已经确定,京东的网页构造还是相对简单,直接返回网页源码,那我们只需用pyquery这个库的CSS方法提取我们需要的内容就行了。然后我们我们还发现其中的psort参数是代表搜索结果上面的销量,价格这些的。这个当然是我们点了两下试出来的,每个网站的构造都不同,这里不做解释了。下面代码中我写出了不同参数代表不同的规则了。你也可以自己手动点一点,看那个参数是什么。下面就不多说了,代码也是非常简单,大家自己看吧

import urllib.request
import urllib.parse
from pyquery import PyQuery as pq
#转换编码并将链接中字符替换掉
shuru=input('此程序为查询京东商品排行!\n请输入要查询的关键字:\n')
shuru=urllib.parse.quote(shuru)

#选择搜索结果的排序方式
guize=input('请选择结果排序方式用数字0~5代表:\n0代表综合,1代表价格由高到低,2代表价格由低到高,3代表销量,4代表评价数,5代表新品:\n')
guize=int(guize)
if guize == 0:
    psort = ''
elif guize == 1:
    psort = '&psort=1'
elif guize == 2:
    psort = '&psort=2'
elif guize == 3:
    psort = '&psort=3'
elif guize == 4:
    psort = '&psort=4'
elif guize == 5:
    psort = '&psort=5'

print(psort)
headers = {
    'user-agent':' Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400',

}
#链接中psort为商品排行条件,3代表销量,4代表评论数,5代表新品,2代表价格升序,1代表价格降序,综合则没有此参数
url="https://search.jd.com/Search?keyword="+shuru+"&wq="+shuru+psort+"&click=0"
print('查询链接为:%s'%(url))
response=urllib.request.Request(url,headers=headers)
response=urllib.request.urlopen(response)
#上述步骤已经拿到单个网页的源码,后面则进行分析提取有用数据。
#用pyquery库对源码处理,然后利用CSS提取所需的信息
res=pq(response.read().decode('utf-8'))
lis=res('.gl-warp.clearfix .gl-i-wrap').items()
i=1
for li in lis:
    ming=li('.p-name em').text()
    jia=li('.p-price strong i').text()
    print("第 %d 名\n%s"%(i,ming))
    print('价格:¥%s\n\n'%(jia))
    i=i+1
    if i==11:
        break

input('输入任意字符退出')

 

PS:如有需要Python学习资料的小伙伴可以加下方的群去找免费管理员领取

 

 

可以免费领取源码、项目实战视频、PDF文件等

看看最近京东哪些产品最火,Python爬取京东的商品排行

 

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

 

作者:战九幽

你可能感兴趣的:(看看最近京东哪些产品最火,Python爬取京东的商品排行)