当我们开始学习python爬虫的时候,都是先学习不同的爬虫库,然后开始通过单脚本来进行爬虫代码的编写,从数据提取到解析到存储都需要自己编写代码。但是Scrapy爬虫框架是可以将数据字段定义、网络请求和解析,数据处理和存储分不同的部分形成一个整体,极大的方便了代码的理解和编写。
针对Scrapy的安装网上有很多,这里就不一一介绍了,我们以简书网专题数据爬取为例来同步介绍相关定义和代码实践。
1、项目创建
创建一个Scrapy项目非常简单,一般快速创建可以通过终端直接输入如下代码:
scrapy startproject zhuanti_new
如果要在不同的文件中创建此项目,就需要先找到对应的文件路径,当然你也可以通过pycharm,直接在对应的文件中,点击左下角终端进行创建,项目就直接在对应的项目文件中创建了一个Scrapy项目
2、Scrapy项目文件介绍
通过下面截图可以看到一个Scrapy项目有哪些文件,同时还需要创建和生成哪些文件,接下来逐一介绍。
(1)最顶层的zhuanti_new文件夹是Scrapy的项目名称
(2)第2层有4个文件:
第1个:和项目名称相同的文件,就是我们通常叫的爬虫包,所有的爬虫代码都在这个包里面
第2个:mian文件,是用来运行这个项目的主函数代码文件,代码写完后通过这个文件总体运行
第3个:配置文件,说明一下默认设置文件的位置为zhuanti_new模块下的settings文件,同时定义项目名称为:zhuanti_new
第4个:为存储爬取结果的txt文件
针对第一个文件里面的代码重点文件下面逐一介绍一下:
(1)items.py文件:定义爬虫抓取的字段信息
(2)pipelines.py文件:主要用于数据处理、清洗和存储
(3)settings.py:主要用于设置请求头、报警处理等相关问题
(4)zhuantispider.py文件:重点爬取数据过程的代码文件,也是新建立的文件
代码如下:
from zhuanti_new.items import ZhuantiNewItem
import scrapy
from scrapy.selector import Selector
class JianshuSpiderSpider(scrapy.Spider):
name = 'zhuantispider'
allowed_domains = ['jianshu.com']
start_urls = ['https://www.jianshu.com/recommendations/collections?page=1&order_by=hot']
#print(start_urls)
def parse(self, response):
'''解析外面页面'''
selector = Selector(response)
partical_urls = selector.re('<div class="count"><a target="_blank" href="(.*?)">', selector)
for url in partical_urls:
print(url)
right_url = response.urljoin(url)
#print(right_url)
parts = ['?order_by=added_at&page={0}'.format(k) for k in range(1, 11)]
for part in parts:
# 要爬取每个专题的前10个文章的信息
real_url = right_url + part
#print(real_url)
yield scrapy.Request(real_url, callback=self.parse_detail)
links = ['https://www.jianshu.com/recommendations/collections?page={}&order_by=hot'.format(i) for i in
range(2, 3)]
for link in links:
print(link)
request = scrapy.Request(link, callback=self.parse)
yield request
def parse_detail(self, response):
selector = Selector(response)
content = selector.xpath('//div[@class="content"]')
for detail in content:
try:
title = detail.xpath('a[1]/text()').extract_first()
summary = detail.xpath('p/text()').extract_first().strip()
author = detail.xpath('div/a[1]/text()').extract_first()
# comments = detail.xpath('div/a[2]/text()').extract_first()这样是不行的
comments = detail.xpath('div/a[2]/text()').extract()[1].strip()
likes = detail.xpath('div/span[1]/text()').extract_first().strip()
money = detail.xpath('div/span[2]/text()').extract_first()
item = ZhuantiNewItem()
if money is not None:
item['title'] = title
item['summary'] = summary
item['author'] = author
item['comments'] = comments
item['likes'] = likes
item['money'] = money.strip()
else:
item['title'] = title
item['summary'] = summary
item['author'] = author
item['comments'] = comments
item['likes'] = likes
print(item)
yield item
except:
pass
以上就是最主要的几个文件,对于初学者只要按照对应要求完成这几个文件的代码填写就可以爬取到数据。
3、案例运行及结果
现在开始运行整体代码,就需要创建上述的main文件了,具体main文件代码如下:
运行的爬虫文件为:zhuantispider,务必不要写成Scrapy项目名称
爬取运行结果如下:
以上就是一个简单的Scrapy项目的创建示例,是不是非常简单。
--每日一小步,未来一大步!
本文分享自微信公众号 - 机器学习算法与Python分析知识库(Data_Bear)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4607696/blog/4738074