欢迎光临
我们一直在努力

爬虫实战 | 爬取京东网书籍价格信息

程序设计思路

前面成功获取到了当当网和1号店的书籍价格信息,下面来搞京东网的。

京东网和前面的不同,当请求数据时,发现获取到的数据为空,后来我为他设置了heards,就成功获取到了数据,关于heards的详细教程后面在写,先把他的数据爬出来。

headers设置方法:

headers = {'authority': 'search.jd.com',
            'method': 'GET',
            'path': '/s_new.php?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=4&s=84&scrolling=y&log_id=1529828108.22071&tpl=3_M&show_items=7651927,7367120,7056868,7419252,6001239,5934182,4554969,3893501,7421462,6577495,26480543553,7345757,4483120,6176077,6932795,7336429,5963066,5283387,25722468892,7425622,4768461',
            'scheme': 'https',
            'referer': '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',
            'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36',
            'x-requested-with': 'XMLHttpRequest',
            'Cookie':'qrsc=3; pinId=RAGa4xMoVrs; xtest=1210.cf6b6759; ipLocation=%u5E7F%u4E1C; _jrda=5; TrackID=1aUdbc9HHS2MdEzabuYEyED1iDJaLWwBAfGBfyIHJZCLWKfWaB_KHKIMX9Vj9_2wUakxuSLAO9AFtB2U0SsAD-mXIh5rIfuDiSHSNhZcsJvg; shshshfpa=17943c91-d534-104f-a035-6e1719740bb6-1525571955; shshshfpb=2f200f7c5265e4af999b95b20d90e6618559f7251020a80ea1aee61500; cn=0; 3AB9D23F7A4B3C9B=QFOFIDQSIC7TZDQ7U4RPNYNFQN7S26SFCQQGTC3YU5UZQJZUBNPEXMX7O3R7SIRBTTJ72AXC4S3IJ46ESBLTNHD37U; ipLoc-djd=19-1607-3638-3638.608841570; __jdu=930036140; user-key=31a7628c-a9b2-44b0-8147-f10a9e597d6f; areaId=19; __jdv=122270672|direct|-|none|-|1529893590075; PCSYCityID=25; mt_xid=V2_52007VwsQU1xaVVoaSClUA2YLEAdbWk5YSk9MQAA0BBZOVQ0ADwNLGlUAZwQXVQpaAlkvShhcDHsCFU5eXENaGkIZWg5nAyJQbVhiWR9BGlUNZwoWYl1dVF0%3D; __jdc=122270672; shshshfp=72ec41b59960ea9a26956307465948f6; rkv=V0700; __jda=122270672.930036140.-.1529979524.1529984840.85; __jdb=122270672.1.930036140|85.1529984840; shshshsID=f797fbad20f4e576e9c30d1c381ecbb1_1_1529984840145'
            }

requ = requests.get(url,headers=headers)

除此之,我们还需要转换京东网编码格式,下面的代码是查看京东编码格式,并把它转换为utf--8的代码:

requ = requests.get(url,headers=headers)
    print(requ.encoding)
    requ.encoding ='utf-8'

其余的和前面的都几乎一样了,先声明一个函数,然后获取HTML文档,获取Xpath对象,获取信息列表,然后遍历根据Xpath语法获取相应的信息。

完整代码如下:

import requests
from lxml import html

headers = {'authority': 'search.jd.com',
            'method': 'GET',
            'path': '/s_new.php?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=4&s=84&scrolling=y&log_id=1529828108.22071&tpl=3_M&show_items=7651927,7367120,7056868,7419252,6001239,5934182,4554969,3893501,7421462,6577495,26480543553,7345757,4483120,6176077,6932795,7336429,5963066,5283387,25722468892,7425622,4768461',
            'scheme': 'https',
            'referer': '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',
            'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36',
            'x-requested-with': 'XMLHttpRequest',
            'Cookie':'qrsc=3; pinId=RAGa4xMoVrs; xtest=1210.cf6b6759; ipLocation=%u5E7F%u4E1C; _jrda=5; TrackID=1aUdbc9HHS2MdEzabuYEyED1iDJaLWwBAfGBfyIHJZCLWKfWaB_KHKIMX9Vj9_2wUakxuSLAO9AFtB2U0SsAD-mXIh5rIfuDiSHSNhZcsJvg; shshshfpa=17943c91-d534-104f-a035-6e1719740bb6-1525571955; shshshfpb=2f200f7c5265e4af999b95b20d90e6618559f7251020a80ea1aee61500; cn=0; 3AB9D23F7A4B3C9B=QFOFIDQSIC7TZDQ7U4RPNYNFQN7S26SFCQQGTC3YU5UZQJZUBNPEXMX7O3R7SIRBTTJ72AXC4S3IJ46ESBLTNHD37U; ipLoc-djd=19-1607-3638-3638.608841570; __jdu=930036140; user-key=31a7628c-a9b2-44b0-8147-f10a9e597d6f; areaId=19; __jdv=122270672|direct|-|none|-|1529893590075; PCSYCityID=25; mt_xid=V2_52007VwsQU1xaVVoaSClUA2YLEAdbWk5YSk9MQAA0BBZOVQ0ADwNLGlUAZwQXVQpaAlkvShhcDHsCFU5eXENaGkIZWg5nAyJQbVhiWR9BGlUNZwoWYl1dVF0%3D; __jdc=122270672; shshshfp=72ec41b59960ea9a26956307465948f6; rkv=V0700; __jda=122270672.930036140.-.1529979524.1529984840.85; __jdb=122270672.1.930036140|85.1529984840; shshshsID=f797fbad20f4e576e9c30d1c381ecbb1_1_1529984840145'
            }

def spider_jd(ISBN):
    url = 'https://search.jd.com/Search?keyword={ISBN}'.format(ISBN = ISBN)
    #获取HTML文档
    requ = requests.get(url,headers=headers)
    print(requ.encoding)
    requ.encoding ='utf-8'
    html_data = requ.text
    #获取Xpath对象
    selector = html.fromstring(html_data)
    #找到列表的集合
    ul_list = selector.xpath('//div[@id="J_goodsList"]/ul/li')
    print(len(ul_list))
    for li in ul_list:
        title = li.xpath('div/div[@class="p-name"]/a/@title')
        print(title[0])
        link = li.xpath('div/div[@class="p-name"]/a/@href')
        link[0] = 'https:' + link[0]
        print(link[0])
        price = li.xpath('div/div[@class="p-price"]/strong/i/text()')
        print(price[0])
        store = li.xpath('div/div[@class="p-shopnum"]/a/@title')
        print(store[0])
        print(('----------'))
spider_jd('9787544285148')

获取到的数据如下:

ISO-8859-1
30
现货新华书店 正版图书 恶意(2016版)  9787544285148
https://item.jd.com/11050391422.html
28.10
云书网旗舰店
----------
恶意(2016版) 9787544285148
https://item.jd.com/14826182369.html
25.30
美美阳光图书专营店
----------
与《白夜行》《嫌疑人X的献身》《解忧杂货店》并称东野圭吾四大杰作。无边的恶意深不见底,有如万丈深渊,让人不寒而栗。读完《恶意》,才算真正认识东野圭吾!
https://item.jd.com/11984135.html
27.30
新经典文化京东自营店
----------
新华书店正版图书,全店使用京东快递配送!精彩38节,阅读越美丽!进会场领300减201神券!
https://item.jd.com/10792889755.html
27.30
文轩网旗舰店
----------
新华书店正版保障,关注店铺领取专属优惠进会场享128减100神券
https://item.jd.com/12696673375.html
27.30
凤凰新华书店旗舰店
----------
新华文轩正版保障,关注店铺可享粉丝价等专属优惠,团购客户量大从优详询本店客服。进会场领300减201神券
https://item.jd.com/32240767839.html
106.90
文轩网旗舰店
----------
淘乐思X50大出版社联合促销
https://item.jd.com/34404079278.html
91.20
淘乐思图书专营店
----------
恶意(精)东野圭吾
https://item.jd.com/10925843899.html
27.30
木垛图书旗舰店
----------
新华书店正版保障,关注店铺领取专属优惠进会场享128减100神券
https://item.jd.com/13644500655.html
93.00
凤凰新华书店旗舰店
----------
新华书店,正版保证,关注店铺成为会员可享店铺专属优惠,团购客户请咨询在线客服!
https://item.jd.com/50026130948.html
136.10
文轩网旗舰店
----------
新华书店,正版保证,关注店铺成为会员可享店铺专属优惠,团购客户请咨询在线客服!
https://item.jd.com/32575230906.html
85.20
文轩网旗舰店
----------
店铺首页可领取30元优惠卷
https://item.jd.com/13893051006.html
199.00
南京爱读图书专营店
----------
南海出版公司东野圭吾,娄美莲,新经典出品
https://item.jd.com/58348095691.html
15.00
筋斗云二手书专营店
----------
新华书店,正品保证,批量采购优惠请联系在线客服。
https://item.jd.com/1702790711.html
27.30
常州新华书店图书专营店
----------
恶意 精装新版 加贺探案集   东野圭吾  外国日本侦探悬疑推理文学小说 全球经典小说读物
https://item.jd.com/1026953583.html
27.30
博库网旗舰店
----------
【组套2本】包邮 恶意(2016版)+解忧杂货店 侦探推理悬疑小说 外国日本侦探悬疑推理文学小说
https://item.jd.com/44606393266.html
55.70
书虫图书专营店
----------
正版现货 东野圭吾作品小说全4册恶意+放学后+谁杀了她+悲剧人偶 日本文学推理小说 侦探推理悬疑小说
https://item.jd.com/42907345038.html
135.00
嘉树联盟图书专营店
----------
恶意/东野圭吾 白夜行 嫌疑人X的献身 解忧杂货店 并称东野圭吾悬疑侦探小说四大杰作 上海书城旗舰店
https://item.jd.com/18236743190.html
27.30
上海书城旗舰店
----------
疫过天晴,好货屯起来,女神节跨店99-5元
https://item.jd.com/27353805719.html
28.30
馨予图书专营店
----------
湖北新华迎双旦,全店低价,团购从优!咨询客服
https://item.jd.com/13107674416.html
27.30
湖北新华书店图书专营店
----------
恶意 东野圭吾 精装版 外国日本侦探悬疑推理文学小说 东野圭吾小说集书
https://item.jd.com/38564999230.html
25.80
时代光华图书旗舰店
----------
财新周刊2020第7期第8期,新冠解毒;复工预备起,抢救新冠病人,抗击病毒保卫湖北保卫武汉,武汉加油抗击新冠病毒,珍藏杂志进店查看更多
https://item.jd.com/12755805622.html
27.65
中信书店
----------
正版 恶意 东野圭吾的书东野圭吾小说集全套 白夜行放学后解忧杂货店悲剧人偶 日本侦探悬疑推理小说
https://item.jd.com/47162264499.html
27.30
安徽新华书店图书专营店
----------
新华书店,正版保证,关注店铺成为会员可享店铺专属优惠,团购客户请咨询在线客服!
https://item.jd.com/30162404361.html
59.30
文轩网旗舰店
----------
正版现货 恶意 东野圭吾 与白夜行 嫌疑人X的献身 解忧杂货店 东野圭吾小说集全套 日本侦探悬疑推理
https://item.jd.com/44068995988.html
30.50
万邦图书城官方旗舰店
----------
正版 恶意 东野圭吾著与白夜行 嫌疑人X的献身 解忧杂货店 并称东野圭吾四大杰作 日本侦探/悬疑小说
https://item.jd.com/44918602232.html
36.80
艺凡图书专营店
----------
正版现货,有任何问题请联系在线客服!
https://item.jd.com/63853108321.html
22.00
宏达万通图书专营店
----------
淘乐思X50大出版社联合促销
https://item.jd.com/35939166334.html
24.60
淘乐思图书专营店
----------
恶意(2016版) 东野圭吾,娄美莲 9787544285148 南海出版公司
https://item.jd.com/34816701718.html
26.50
衡石图书专营店
----------
【书签】恶意 精装 东野圭吾作品 与白夜行解忧杂货店嫌疑人X的献身并称东野四大杰作日本推理侦探文学小
https://item.jd.com/64890800168.html
34.00
一晗图书专营店
----------

Process finished with exit code 0

2020-3-9补充内容,当进行京东图书爬虫时发现,如果店铺名称是京东自营则无法获取,情况和当当网一样,因此这里也需要添加一个判断:

store = li.xpath('div/div[@class="p-shopnum"]/a/@title')
        if len(store) == 0:
            store.append('京东自营')
        print(store[0])

其余代码不做任何改变,另外想进行大量爬取工作还要搞一些反反爬虫措施,暂时也先不考虑了,等把整个项目初步搭建好再回来慢慢优化。

赞(1) 打赏
未经允许不得转载:散人研 » 爬虫实战 | 爬取京东网书籍价格信息
分享到: 更多 (0)

评论 抢沙发

6 + 3 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏