爬虫之 爬取京东计算机书籍

article/2025/8/19 23:03:06

爬取京东的计算机类书籍

1. 工具: requests, pycharm, scrapy, mongodb

2. 网页提取工具: xpath

1. 分析京东网页:

打开京东网站 查看源码发现不是动态网页,而且都是列表, 说明了很好处理;开始分析;

我们只要提取书名,书的链接, 书的出版社,书的作者,评价数,价格

 

I

注意一下,书的价格, 评论数,源码并没有,说明是ajax请求;因此使用浏览器抓包看看有没有;

抓包可以找到评论数;

url: https://club.jd.com/comment/productCommentSummaries.action?my=pinglun&referenceIds=11936238

referenceIds书的id 返回是json

再找价格:

也可以找到:其中m 是书的原价, p 是当前的价格;

url: https://p.3.cn/prices/mgets?ext=11000000&pin=&type=1&area=1_72_4137_0&skuIds=J_11936238

skuIds是书的id, 返回是json

2. 编写代码:

 
scrapy startproject jd

 

1. 编写spider:

#  coding: utf-8
import time
from scrapy.selector import Selector
from scrapy.http import Request
from scrapy.spiders import Spider
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning# 禁用安全请求警告
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
'''
time: 2018-05-19
by: jianmoumou233
爬取京东图书,IT分类'''class Page(Spider):name = "jd"mongo_collections = "jd"headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',"Upgrade-Insecure-Requests": "1","Connection": "keep-alive","Cache-Control": "max-age=0",}def start_requests(self):for i in xrange(1, 280):url = 'https://list.jd.com/list.html?cat=1713,3287,3797&page=%d' % iyield Request(url, dont_filter=True)def parse(self, response):''':param url: url:param title: book's name:param author: book's author:param shop: shop's name:param _id: book id  and mongodb's _id:param price: book's price:param old_price: book's original price:param comment_count: book's number of comments'''xbody = Selector(response)item = dict()_li = xbody.xpath("//*[@id='plist']/ul/li")for i in _li:item['url'] = i.xpath("./div/div[1]/a/@href").extract_first()item['title'] = i.xpath("./div/div[contains(@class,'p-name')]/a/em/text()").extract_first()item['author'] = i.xpath("./div/div[contains(@class,'p-bookdetails')]//span[contains(@class,'author_type_1')]/a/text()").extract_first()item['shop'] = i.xpath("./div/div[contains(@class,'p-bookdetails')]/span[contains(@class,'p-bi-store')]/a/@title").extract_first()item["_id"] = i.xpath("./div/@data-sku").extract_first()item["spidertime"] = time.strftime("%Y-%m-%d %H:%M:%S")for k, v in item.items():if v:item[k] = str(v).strip()if item.get('_id'):try:item['price'], item["old_price"] = self.price(item['_id'], self.headers)time.sleep(2)item['comment_count'] = self.buy(item['_id'], self.headers)except Exception as e:print eif not str(item['url']).startswith("http"):item['url'] = "https" + item['url']yield item@staticmethoddef price(id, headers):url = "https://p.3.cn/prices/mgets?ext=11000000&pin=&type=1&area=1_72_4137_0&skuIds=J_%s&pdbp=0&pdtk=&pdpin=&pduid=15229474889041156750382&source=list_pc_front" % iddata = requests.get(url, headers=headers, verify=False).json()return data[0].get('p'), data[0].get("m")@staticmethoddef buy(id, headers):url = 'https://club.jd.com/comment/productCommentSummaries.action?my=pinglun&referenceIds=%s' % iddata = requests.get(url, headers=headers, verify=False).json()return data.get('CommentsCount')[0].get("CommentCount")

2. 编写入库(Mongodb)pipelines:

# -*- coding: utf-8 -*-import sys
import pymongo
reload(sys)
sys.setdefaultencoding("utf-8")class Mongo(object):mongo_uri = Nonemongo_db = Noneclient = Nonedb = Nonedef __init__(self, mongo_uri, mongo_db):self.mongo_uri = mongo_uriself.mongo_db = mongo_db@classmethoddef from_crawler(cls, crawler):return cls(mongo_uri=crawler.settings.get('MONGO_URI'),mongo_db=crawler.settings.get('MONGO_DATABASE', 'test'),)def open_spider(self, spider):self.client = pymongo.MongoClient(host=self.mongo_uri)self.db = self.client[self.mongo_db]def close_spider(self, spider):self.client.close()def process_item(self, item, spider):try:self.db[spider.mongo_collections].insert(dict(item))except Exception as e:pass# return item

3. 设置settings:

MONGO_URI = "mongodb://127.0.0.1:27017"
MONGO_DATABASE = "jd"# Configure item pipelines
# See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {'jd.pipelines.Mongo': 300,
}

4. 运行spider:

scrapy crawl jd

5. 结果:

url 的链接应该是https,我拼接错了;

总结: 

   爬了几千个,还没有封我,加上延迟,headrs尽量都加上;

 


http://chatgpt.dhexx.cn/article/YJGiAY6l.shtml

相关文章

计算机专业必读哪些经典书籍?

大家好,我是狗哥。 经常有粉丝问:狗哥,我想学计算机,应该读哪些书籍?那么多计算机书籍,我如何选?,今天狗哥就把自己的书单发出来,供大家参考,并附上连接&…

国家电网计算机类备考经验分享

刚刚参加完国家电网计算机类23届的笔试和面试,笔试78,为了给备考国家电网计算机类的小伙伴提供一些有用的信息,给大家分享一个经验贴。本文分为4部分。分别为:个人情况、复习时间线、所用书籍、经验分享。希望这篇文章可以解决小伙…

计算机专业必读的经典书籍!!(建议收藏)

第一个系列:基础 要说哪些书是计算机的经典书籍,我猜很多人都要推荐机械工业出版社引进的黑皮书系列了,你就看吧,每一本都很适合垫显示器垫桌角,垫显示器这个其实只不过是一个调侃而已,之所以这么说&#…

可以看计算机专业书籍的app,分享两个好用的读书APP

分享我现在用的2个读书APP:微信读书和藏书馆。建议不要装太多读书APP,装得越多,使用越分散,反而读得越少。 1.微信读书 优点: AI朗读,边听边走; 分享互动,思维膨胀; 读书…

计算机视觉经典书籍推荐

计算机视觉是人工智能的一个分支,主要研究如何使机器“看”的科学,通俗来说就是用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼观察或传送给仪器检测的图像。 无人机技…

计算机专业必读的经典书籍

书单推荐 一、计算机思维 《数学之美》 推荐理由: 吴军博士文笔流畅、干货满满,同时切合实际应用,可以作为计算机科学(尤其是AI领域)的入门读物 《程序员的数学》系列 推荐理由: 程序员需要一定的数学知识,但不是像高…

CentOS防火墙的常用快捷命令

CentOS是免费开源的Linux发行版之一,它兼容RHEL并由社区进行维护,大多数美国服务器提供对该系统支持。在使用CentOS系统时,您需要了解一些常用命令,比如开启、查看、关闭防火墙等。本文将介绍下CentOS防火墙的常用命令。 CentOS是一种面向企业级服务器环境的Linux发行版,…

linux防火墙状态centos5,怎么样查看centos防火墙状态

你想查看下centos防火墙的状态吗?要怎么样查看呢?你下面由学习啦小编给你做出详细的查看centos防火墙状态方法介绍!希望对你有帮助! 查看centos防火墙状态方法一: 直接使用iptables -L查看防火墙设置 service iptables stop关闭防火墙 service iptables start/res…

Ubuntu/Centos防火墙

区分Linux、Ubuntu、Centos的防火墙: Linux原始自带的防火墙工具iptables Ubuntu的防火墙工具ufw Centos的防火墙工具firewalld ----------------------------------------------------------------------------------------------------- Ubuntu默认使…

​CentOS防火墙操作命令 ​

CentOS防火墙操作命令 1、查看防火墙服务状态 systemctl status firewalld.service 或者查看防火墙的状态: 1 firewall-cmd --state 2、开启、重启防火墙 启动firewall: 1 systemctl start firewalld.service 设置开机自启或禁用: …

centos防火墙管理

防火墙管理 查看防火墙状态 [root107 ~]# firewall-cmd --state 开放、关闭端口 # firewall-cmd --zonepublic --add-port3306/tcp --permanent # 开放3306端口 # firewall-cmd --zonepublic --remove-port3306/tcp --permanent #关闭3306端口 # firewall-cmd --reload…

Centos 防火墙开启/关闭端口

Centos 防火墙开启/关闭端口 Centos 6 开启/关闭端口查看防火墙状态命令的方式写入iptables文件的方式 Centos 7 开启/关闭端口查看firewall服务状态查看firewall的状态开启、重启、关闭、firewalld.service服务查看防火墙规则查询、开放、关闭端口关于防火墙拦截FTP的问题cent…

转:Centos防火墙设置与端口开放的方法

转自: Centos防火墙设置与端口开放的方法_tianxin的专栏-CSDN博客Centos升级到7之后,内置的防火墙已经从iptables变成了firewalld。所以,端口的开启还是要从两种情况来说明的,即iptables和firewalld。更多关于CentOs防火墙的最新…

【Linux】CentOS防火墙操作:开启端口、开启、关闭、配置

🔶 基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status firewalld 开机禁用 : systemctl disable firewalld 开机启用 : systemctl enable firewal…

CentOS 防火墙配置(firewall)

​ 常用的防火墙配置命令: 查看所有防火墙规则: firewall-cmd --list-all-zones查看当前区域防火墙规则: firewall-cmd --list-all添加一个开放服务规则: firewall-cmd --add-servicessh删除一个开放服务规则: firewa…

Centos 防火墙介绍

目录 一、防火墙基本介绍 二、iptables(Centos6) 2.1、介绍 2.2、相关命令 三、firewalld(Centos7) 3.1、介绍 3.1.1、zone分类及相关命令 3.1.2、预定义的服务 3.2、相关命令 3.2.1、服务安装 3.2.2、服务启停命令 3.2.3、firewalld规则添加 3.3、富规则 一、防火…

常用 Git 工作流,明确团队的开发流程

借鉴的git工作流程模型:A successful Git branching model 下文的 Git 工作流是一些在开发团队中非常流行和最佳的工作流的示例。也有一些团队为预发布创建分支,并且该分支非常适合他们。所以你可以参考这些工作流,然后创建自己的 Git 工作流…

sourceTree中git工作流使用

1.初始化 2.构建feature分支 3.完成新功能 ####4.建立发布版本 完成发布

敏捷开发下的Git工作流应用实践

1 背景 在我们日常工作中,协同开发是最高效的一种方式,尤其是比较大的需求点以及功能,甚至是新项目的开发。这种情况下,Git的使用无可避免的也会出现一些问题。而在计算机技术发展到今天的同时,协同开发工具也不断进步…

刚进公司,不懂Git工作流的我瑟瑟发抖

前言 不懂git工作流,被辞退了! 之前在看到这句话的时候,我刚实习入职不久,瑟瑟发抖。好巧不巧,今天又看到了类似的文章讲git重要性的。 眼下,学校导师安排给我的课题组了一个新的工程项目,使用g…