前言
自己写爬虫算下来多少也有那么些了,但基本上都是爬的小数据完全不用考虑效率。但今天小J的朋友让我帮忙爬下全国XXX酒店信息。这不得去考虑爬虫效率,以及反反爬虫技巧。此时我脑海里第一想到了scrapy框架。今天小试scrapy,爬下自己的博客统计下文章的浏览量。
正文
0x01 scrapy安装
- 建立虚拟python3.6环境
conda create --name python3.6 python=3.6
- 安装scrapy
activate python3.6
conda install scrapy
0x02 项目
- 建立scrapy项目
scrapy startproject csdn
- 使用pycharm打开项目并创建csdn.py
import scrapy
class csdnSpider(scrapy.Spider):
name = 'csdn'
#文章分页url
start_urls = [
'https://blog.csdn.net/vr7jj/article/list/1',
'https://blog.csdn.net/vr7jj/article/list/2'
]
def parse(self, response):
print('#-----------------------')
li = response.css('#mainBox > main > div.article-list > div > h4 > a')
for i in li:
# print(i)
title = str(i.css('::text').extract()[2]).strip()
link = i.css('::attr(href)').extract()[0]
print('next --> [%s][%s]' % (link,title))
yield scrapy.Request(link,callback=self.parse_item, meta={'title': title})
# print(i.css('attr(href)').extract())
print('#-----------------------')
def parse_item(self, response):
title = response.meta['title']
print('******%s*******' % title, end='')
con = response.css('#mainBox > main > div.blog-content-box > div.article-info-box > div > div > span::text')
print(con.extract()[0], end='')
print('************************')
- 创建begin.py
from scrapy import cmdline
cmdline.execute("scrapy crawl csdn".split())
- 运行begin.py
感想
scrapy功能很强大,认识有限。所以目前留下很多问题。
- post请求方式如何去爬取
- 需要登陆scrapy有什么处理方式
- 如何持久化
- 反反爬虫怎么实现
参考内容
Scrapy框架
Scrapy 1.5 documentation
Scrapy 0.24 中文文档
scrapy实现递归爬取
scrapy如何迭代爬去?