用scrapy爬取京东商城的商品信息

软件环境:

 1 gevent (1.2.2)
 2 greenlet (0.4.12)
 3 lxml (4.1.1)
 4 pymongo (3.6.0)
 5 pyOpenSSL (17.5.0)
 6 requests (2.18.4)
 7 Scrapy (1.5.0)
 8 SQLAlchemy (1.2.0)
 9 Twisted (17.9.0)
10 wheel (0.30.0)

1.创建爬虫项目

2创建京东网站爬虫. 进入爬虫项目目录,执行命令:

scrapy genspider jd www.jd.com

会在spiders目录下会创建和你起的名字一样的py文件:jd.py,这个文件就是用来写你爬虫的请求和响应逻辑的

3. jd.py文件配置

分析的amazon网站的url规则:

https://search.jd.com/Search?

以防关键字是中文,所以要做urlencode

1.首先写一个start_request函数,用来发送第一次请求,并把请求结果发给回调函数parse_index,同时把reponse返回值传递给回调函数,response类型<class                 ‘scrapy.http.response.html.HtmlResponse‘>

 1     def start_requests(self):
 2         # https://www.amazon.cn/s/ref=nb_sb_ss_i_1_6?field-keywords=macbook+pro
 3         # 拼接处符合条件的URL地址
 4         # 并通过scrapy.Requst封装请求,并调用回调函数parse_index处理,同时会把response传递给回调函数
 6         url = ‘https://search.jd.com/Search?‘
 7         # 拼接的时候field-keywords后面是不加等号的
 9         url += urlencode({"keyword": self.keyword, "enc": "utf-8"})
10         yield scrapy.Request(url,
11                              callback=self.parse_index,
12                              )

2.parse_index从reponse中获取所有的产品详情页url地址,并遍历所有的url地址发送request请求,同时调用回调函数parse_detail去处理结果

 1 def parse_detail(self, response):
 2     """
 3     接收parse_index的回调,并接收response返回值,并解析response
 4     :param response:
 5     :return:
 6     """
 7     jd_url = response.url
 8     sku = jd_url.split(‘/‘)[-1].strip(".html")
 9     # price信息是通过jsonp获取,可以通过开发者工具中的script找到它的请求地址
10     price_url = "https://p.3.cn/prices/mgets?skuIds=J_" + sku
11     response_price = requests.get(price_url)
12     # extraParam={"originid":"1"}  skuIds=J_3726834
13     # 这里是物流信息的请求地址,也是通过jsonp发送的,但目前没有找到它的参数怎么获取的,这个是一个固定的参数,如果有哪位大佬知道,好望指教
14     express_url = "https://c0.3.cn/stock?skuId=3726834&area=1_72_4137_0&cat=9987,653,655&extraParam={%22originid%22:%221%22}"
15     response_express = requests.get(express_url)
16     response_express = json.loads(response_express.text)[‘stock‘][‘serviceInfo‘].split(‘>‘)[1].split(‘<‘)[0]
17     title = response.xpath(‘//*[@class="sku-name"]/text()‘).extract_first().strip()
18     price = json.loads(response_price.text)[0][‘p‘]
19     delivery_method = response_express
20     # # 把需要的数据保存到Item中,用来会后续储存做准备
21     item = AmazonItem()
22     item[‘title‘] = title
23     item[‘price‘] = price
24     item[‘delivery_method‘] = delivery_method
25
26     # 最后返回item,如果返回的数据类型是item,engine会检测到并把返回值发给pipelines处理
27     return item

4. item.py配置

 1 import scrapy
 2
 3
 4 class JdItem(scrapy.Item):
 5     # define the fields for your item here like:
 6     # name = scrapy.Field()
 7     # amazome Item
 8     title = scrapy.Field()
 9     price = scrapy.Field()
10     delivery_method = scrapy.Field()

5. pipelines.py配置

 1 from pymongo import MongoClient
 2
 3
 4 class MongoPipeline(object):
 5     """
 6     用来保存数据到MongoDB的pipeline
 7     """
 8
 9     def __init__(self, db, collection, host, port, user, pwd):
10         """
11         连接数据库
12         :param db: databaes name
13         :param collection: table name
14         :param host: the ip for server
15         :param port: thr port for server
16         :param user: the username for login
17         :param pwd: the password for login
18         """
19         self.db = db
20         self.collection = collection
21         self.host = host
22         self.port = port
23         self.user = user
24         self.pwd = pwd
25
26     @classmethod
27     def from_crawler(cls, crawler):
28         """
29         this classmethod is used for to get the configuration from settings
30         :param crwaler:
31         :return:
32         """
33         db = crawler.settings.get(‘DB‘)
34         collection = crawler.settings.get(‘COLLECTION‘)
35         host = crawler.settings.get(‘HOST‘)
36         port = crawler.settings.get(‘PORT‘)
37         user = crawler.settings.get(‘USER‘)
38         pwd = crawler.settings.get(‘PWD‘)
39
40         return cls(db, collection, host, port, user, pwd)
41
42     def open_spider(self, spider):
43         """
44         run once time when the spider is starting
45         :param spider:
46         :return:
47         """
48         # 连接数据库
50         self.client = MongoClient("mongodb://%s:%[email protected]%s:%s" % (
51             self.user,
52             self.pwd,
53             self.host,
54             self.port
55         ))
56
57     def process_item(self, item, spider):
58         """
59         storage the data into database
60         :param item:
61         :param spider:
62         :return:
63         """      # 获取item数据,并转换成字典格式
64         d = dict(item)       # 有空值得不保存
65         if all(d.values()):          # 保存到mongodb中
66             self.client[self.db][self.collection].save(d)
67         return item
68
69         # 表示将item丢弃,不会被后续pipeline处理
70         # raise DropItem()

6. 配置文件

 1 # database server
 2 DB = "jd"
 3 COLLECTION = "goods"
 4 HOST = "127.0.0.1"
 5 PORT = 27017
 6 USER = "root"
 7 PWD = "123"
 8 ITEM_PIPELINES = {
 9    ‘MyScrapy.pipelines.MongoPipeline‘: 300,
10 }

原文地址:https://www.cnblogs.com/eric_yi/p/8343721.html

时间: 2024-11-08 16:09:34

用scrapy爬取京东商城的商品信息的相关文章

Scrapy实战---Scrapy对接selenium爬取京东商城商品数据

本篇目标:我们以爬取京东商城商品数据为例,展示Scrapy框架对接selenium爬取京东商城商品数据. 背景: 京东商城页面为js动态加载页面,直接使用request请求,无法得到我们想要的商品数据,故需要借助于selenium模拟人的行为发起请求,输出源代码,然后解析源代码,得到我们想要的数据. 第一步:设置我们需要提取的字段,也就是在Scrapy框架中设置Item.py文件. class ProductItem(scrapy.Item): # define the fields for y

爬取京东本周热卖商品基本信息存入MySQL

爬取京东本周热卖商品基本信息存入MySQL 网络爬虫介绍 概述 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕虫. 产生背景 随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战.搜索引擎(Search Engine),例如传统的通用搜索引擎AltaVista,Yahoo!和Google等,作为一个辅助人

爬取京东本周热卖商品所有用户评价存入MySQL

爬取京东本周热卖商品所有用户评价存入MySQL 说明 本项目是对(爬取京东本周热卖商品基本信息存入MySQL)项目的追加,所以会有一些内容上的衔接,例如工具的使用方法等在此篇就不赘述,大家可以直接去看上一个项目中的介绍.爬取京东本周热卖商品基本信息存入MySQL的链接:http://blog.csdn.net/u011204847/article/details/51292512 项目简介 需求概要 1.按照下面所述进入京东本周热卖页面,抓取本周热卖页面所有商品链接. 2.抓取评价中的商品评价.

scrapy爬取京东iPhone11评论(一)

咨询行业中经常接触到文本类信息,无论是分词做词云图,还是整理编码分析用,都非常具有价值. 本文将记录使用scrapy框架爬取京东IPhone11评论的过程,由于一边学习一边实践,更新稍慢请见谅. 1.scrapy开始创建项目: scrapy startproject projectName 2. 进入创建的项目目录: cd projectName 3.以默认的basic模板创建第一个爬虫: scrapy genspider spiderName www.hostDomain.com 好的,这样基

scrapy爬取京东

京东对于爬虫来说太友好了,不向天猫跟淘宝那样的丧心病狂,本次爬虫来爬取下京东,研究下京东的数据是如何获取的. 1 # 目标网址: jd.com 2 # 关键字: 手机(任意关键字,本文以手机入手) 得到url如下: 1 https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&wq=%E6%89%8B%E6%9C%BA&pvid=c53afe790a6f440f9adf7edcaabd8703 往下拖拽的时候

Python爬虫从入门到放弃(十八)之 Scrapy爬取所有知乎用户信息(上)

爬取的思路 首先我们应该找到一个账号,这个账号被关注的人和关注的人都相对比较多的,就是下图中金字塔顶端的人,然后通过爬取这个账号的信息后,再爬取他关注的人和被关注的人的账号信息,然后爬取被关注人的账号信息和被关注信息的关注列表,爬取这些用户的信息,通过这种递归的方式从而爬取整个知乎的所有的账户信息.整个过程通过下面两个图表示: 爬虫分析过程 这里我们找的账号地址是:https://www.zhihu.com/people/excited-vczh/answers我们抓取的大V账号的主要信息是:

Python爬虫从入门到放弃(十九)之 Scrapy爬取所有知乎用户信息(下)

在上一篇文章中主要写了关于爬虫过程的分析,下面是代码的实现,完整代码在:https://github.com/pythonsite/spider items中的代码主要是我们要爬取的字段的定义 class UserItem(scrapy.Item): id = Field() name = Field() account_status = Field() allow_message= Field() answer_count = Field() articles_count = Field()

使用 Scrapy 爬取去哪儿网景区信息

Scrapy 是一个使用 Python 语言开发,为了爬取网站数据,提取结构性数据而编写的应用框架,它用途广泛,比如:数据挖掘.监测和自动化测试.安装使用终端命令 pip install Scrapy 即可. Scrapy 比较吸引人的地方是:我们可以根据需求对其进行修改,它提供了多种类型的爬虫基类,如:BaseSpider.sitemap 爬虫等,新版本提供了对 web2.0 爬虫的支持. 1 Scrapy 介绍 1.1 组成 Scrapy Engine(引擎):负责 Spider.ItemP

43.scrapy爬取链家网站二手房信息-1

首先分析:目的:采集链家网站二手房数据1.先分析一下二手房主界面信息,显示情况如下: url = https://gz.lianjia.com/ershoufang/pg1/显示总数据量为27589套,但是页面只给返回100页的数据,每页30条数据,也就是只给返回3000条数据. 2.再看一下筛选条件的情况: 100万以下(775):https://gz.lianjia.com/ershoufang/pg1p1/(p1是筛选条件参数,pg1是页面参数) 页面返回26页信息100万-120万(47