当前位置:
首页 > Python基础教程 >
-
爬虫(十七):Scrapy框架(四) 对接selenium爬取京东商品数据(3)
)
def open_spider(self,spider):
self.client = pymongo.MongoClient(self.mongo_url)
self.db = self.client[self.mongo_db]
def process_item(self,item, spider):
# name = item.__class__.collection
name = self.collection
self.db[name].insert(dict(item))
return item
def close_spider(self,spider):
self.client.close()
1.6 配置settings文件
配置settings文件,将项目中使用到的配置项在settings文件中配置,本项目中使用到了KEYWORDS,MAX_PAGE,SELENIUM_TIMEOUT(页面加载超时时间),MONGOURL,MONGODB,COLLECTION。
- KEYWORDS=['iPad']
- MAX_PAGE=2
- MONGO_URL = 'localhost'
- MONGO_DB = 'test'
- COLLECTION = 'ProductItem'
- SELENIUM_TIMEOUT = 30
以及修改配置项,激活下载器中间件和item pipeline。
- DOWNLOADER_MIDDLEWARES = {
- 'scrapyseleniumtest.middlewares.SeleniumMiddleware': 543,
- }
- ITEM_PIPELINES = {
- 'scrapyseleniumtest.pipelines.MongoPipeline': 300,
- }
1.7 执行结果
项目中所有需要开发的代码和配置项开发完成,运行项目。
- scrapy crawl jd
运行项目之后,在mongodb中查看数据,已经执行成功。
1.8 完整代码
items.py:
- # -*- coding: utf-8 -*-
- # Define here the models for your scraped items
- #
- # See documentation in:
- # https://docs.scrapy.org/en/latest/topics/items.html
- from scrapy import Item,Field
- class ProductItem(Item):
- # define the fields for your item here like:
- # name = scrapy.Field()
- # dp = Field()
- # title = Field()
- # price = Field()
- # comment = Field()
- # url = Field()
- # type = Field()
- pass
jd.py:
- # -*- coding: utf-8 -*-
- from scrapy import Request,Spider
- from urllib.parse import quote
- from bs4 import BeautifulSoup
- class JdSpider(Spider):
- name = 'jd'
- allowed_domains = ['www.jd.com']
- base_url = 'https://search.jd.com/Search?keyword='
- def start_requests(self):
- for keyword in self.settings.get('KEYWORDS'):
- for page in range(1, self.settings.get('MAX_PAGE') + 1):
- url = self.base_url + quote(keyword)
- # dont_filter = True 不去重
- yield Request(url=url, callback=self.parse, meta={'page': page}, dont_filter=True)
- def parse(self, response):
- soup = BeautifulSoup(response.text, 'lxml')
- lis = soup.find_all(name='li', class_="gl-item")
- for li in lis:
- proc_dict = {}
- dp = li.find(name='span', class_="J_im_icon")
- if dp:
- proc_dict['dp'] = dp.get_text().strip()
- else:
- continue
- id = li.attrs['data-sku']
- title = li.find(name=
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式