我们使用scrapy简单代码爬取豆瓣电影排行榜并生成excel表格:

1.首先还是创建一个scrapy项目:

命令行:

scrapy startproject dianying

最后一个dianying是项目名称,自己填个喜欢的就行。

2.由于豆瓣电影需要检查user-agent所以要在settings中添加一行:

USER_AGENT = Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.

填自己的浏览器上的user-agent就行。

3.然后再spiders文件夹下,建立一个xxx.py文件,名字随意,输入代码:

import scrapy

class DySpider(scrapy.Spider):
name = dy
start_urls = [https://movie.douban.com/top250,]

def parse(self, response):
for move in response.css(div.info):
yield {
name:move.css(span.title::text).extract(),
mark:move.css(span.rating_num::text).extract(),
quote:move.css(span.inq::text).extract(),
info:move.css(div.bd p::text).extract(),
}
next_page = response.css(span.next a::attr(href)).extract_first()
if next_page is not None:
next_page = response.urljoin(next_page)
yield scrapy.Request(next_page, callback=self.parse)

从是到下依次是:

爬虫的名字

开始链接(可以的多个的)

parse这个函数是默认的初始函数,也就是会自动得到start_urls中的response

for开始先划分大块,再划分小块,这里我故意用的css选择scrapy还支持xpath选择,建议用xpath(主要是大家都用这个),当然非要用正则表达式,Beautifulsoup也是可以的。直接用yield返回数据。

next_page部分,找出next中的链接部分,如果next_page有东西,那么就使用urljoin将这个链接载入在初始url中,然后callback给自己,继续爬取。urljoin这个函数,我几乎没有看到什么人用,真的是良心推介,谁用就知道,省去构造链接的很多麻烦。

4.保存:

spiders目录下运行命令行:

scrapy crawl dy -o 1.csv

这个命令的意思是:scrapy craw dy 运行名字是dy的爬虫 -o 保存 1.cvs 文件名1,格式csv

scrapy还支持直接保存为 json jl等格式(你故意把格式部分输错,就知道支持那些了),我反正一般小体积的文件都直接边跑边存了。

5.整理:

文件存下来是乱码,excel打开需要需要BOM,而存下来的数据没有。

使用sublime text打开保存的csv文件:

就可以用excel打开你的保存数据了。

6.关于抓取时的调试:(这个我很少见人讲)

使用命令行:

scrapy shell "你想调试的网页"

windows系统下,链接务必使用双引号

这里以

scrapy shell 「baidu.com」

为例子,会出现:

然后我们输入需要测试是否可以抓取到内容:

response.css(title)

也可以在response后面用xpath()来检查自己的抓取的内容是否正确。

接下来再学习配置scrapy - scrapy_redis - 反反扒取:post,ajax(一个贾克斯?)-利用redis做分散式爬虫。大家就可以搞事情去了(我知道你们的目的就是搞事情)。

我也是菜鸟一个,欢迎大家和我一起搞事情

要搞事也请务必加我一个!!


推荐阅读:
相关文章