Scrapy框架爬虫——以京东众筹为例
- 第一步, 打开命令提示符,创建一个Scrapy框架;
- 第二步,定位到创建的文件夹;
- 第三步,在spider文件夹中创建一个.py文件(注:不要关闭命令提示符);
- 第四步,打开items.py这个文件,将提取信息的名称、属性写入其中;
- 第五步,打开第三步创建的.py文件;
- 第六步,根据网页源代码查找提取信息,编写代码(这里需要修改start_urls为访问网页的网址。删除allowed_domains,导入items.py中的Jd1Item类);
- 第七步,打开pipelines.py,将所提取的内容写入json文件;
- 第八步, 打开settings.py,修改访问的USER_AGENT,注释掉ROBOTSTXT_OBEY,解除ITEM_PIPELINES注释;
- 最后,打开命令提示符,运行创建的.py文件(这里是jdzch1.py);
第一步, 打开命令提示符,创建一个Scrapy框架;
第二步,定位到创建的文件夹;
第三步,在spider文件夹中创建一个.py文件(注:不要关闭命令提示符);
第四步,打开items.py这个文件,将提取信息的名称、属性写入其中;
import scrapy
class Jd1Item(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
# 定义所找的变量的名字、属性
title = scrapy.Field()
perc = scrapy.Field()
outc1 = scrapy.Field()
money = scrapy.Field()
outc2 = scrapy.Field()
time = scrapy.Field()
outc3 = scrapy.Field()
第五步,打开第三步创建的.py文件;
第六步,根据网页源代码查找提取信息,编写代码(这里需要修改start_urls为访问网页的网址。删除allowed_domains,导入items.py中的Jd1Item类);
提取信息的其他方式见(https://blog.csdn.net/weixin_43196531/article/details/85159471)
import scrapy
# 导入items类, 使items类生效
from jd1.items import Jd1Item
class Jdzch1Spider(scrapy.Spider):
name = 'jdzch1'
start_urls = ['http://z.jd.com/bigger/search.html']
def parse(self, response):
result = response.xpath('//li[@class="info type_now"]')
# 循环每个商品,提取所需信息
for i in result:
# 定义 item 字典
item = Jd1Item()
# 筛选信息
item['title'] = i.xpath('.//h4[@class="link-tit"]/text()').extract_first()
item['perc'] = i.xpath('.//li[@class="fore1"]/p[@class="p-percent"]/text()').extract_first()
item['outc1'] = i.xpath('.//li[@class="fore1"]/p[@class="p-extra"]/text()').extract_first()
item['money'] = i.xpath('.//li[@class="fore2"]/p[@class="p-percent"]/text()').extract_first()
item['outc2'] = i.xpath('.//li[@class="fore2"]/p[@class="p-extra"]/text()').extract_first()
item['time'] = i.xpath('.//li[@class="fore3"]/p[@class="p-percent"]/text()').extract_first()
item['outc3'] = i.xpath('.//li[@class="fore3"]/p[@class="p-extra"]/text()').extract_first()
yield item
第七步,打开pipelines.py,将所提取的内容写入json文件;
import json
class Jd1Pipeline(object):
# 定义初始化函数
def __init__(self):
# 定义函数名
self.filename = open('jdzch.json', 'w',encoding = 'utf-8')
# 处理函数
def process_item(self, item, spider):
# 将json数据转化为字符串
text = json.dumps(dict(item), ensure_ascii = False) + '\n'
# 对文件进行写入
self.filename.write(text)
# 定义文件关闭函数
def close_spider(self,spider):
self.filename.close()
第八步, 打开settings.py,修改访问的USER_AGENT,注释掉ROBOTSTXT_OBEY,解除ITEM_PIPELINES注释;
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6788.400 QQBrowser/10.3.2714.400'
最后,打开命令提示符,运行创建的.py文件(这里是jdzch1.py);
文件内容如下: