python3爬虫豆瓣前一百_【Python3爬虫】Scrapy爬取豆瓣电影TOP250

继续学习scrapy这个好用的框架,而今天要实现的就是使用是scrapy爬取豆瓣电影TOP250榜单上的电影信息。

步骤如下:

一、爬取单页信息

首先是建立一个scrapy项目,在文件夹中按住shift然后点击鼠标右键,选择在此处打开命令行窗口,输入以下代码:

scrapy startproject DouBan

然后打开pycharm,再打开我们建立好的DouBan项目,我们这次的目标是爬取榜单上的电影名称,导演主演信息,评分以及一句话短评内容,所以我们在items.py中输入如下代码:

写好了items.py后,再在spiders文件夹下新建一个douban.py文件,输入以下代码:

在start_urls中包含的就是我们要爬取的网页链接,parse方法就是实现解析网页获取我们需要的内容。

由于原网页是一个很明显的表单结构,所以在这里我们选择使用xpath来解析网页,点击想要爬取的元素,右键选择Copy Xpath就可以轻松获得该元素的xpath。

利用xpath可以轻松获得一页上的信息,这些信息都存在一个列表之中,这个时候我们就需要使用前面定义的DouBanItem了,定义一个item为DouBanItem对象,然后将爬取到的每个电影的信息保存在item之中,代码如下:

二、实现翻页

这样我们就成功爬取了一页的信息,那么我们如何实现翻页呢?

观察网页可以发现点击“后页”时就会跳转到下一页,而“后页”对应的元素之中保存着下一页的部分链接信息,和“https://movie.douban.com/top250”拼凑在一起就构成了下一页的链接,这样我们就可以实现翻页了。而到了最后一页,“后页”对应的元素之中就没有href这个属性了,因此需要加入一个判断来确定是否还有下一页。

实现翻页的代码如下:

三、保存数据

数据都已经爬取下来了,我们应该怎么保存呢?我这次选择把数据保存到一个csv文件中,实现方法如下:

打开settings.py文件,输入一下两行代码

FEED_URI = u"file:///E://douban.csv"

FEED_FORMAT = "CSV"

四、添加main.py

由于每次运行scrapy项目都要在命令行中输入scrapy crawl 项目名称,这样会有些麻烦,那么有没有简单点的方法就能运行项目呢?

答案当然是有的,首先是在项目文件夹下新建一个main.py文件,然后在main.py里输入一下代码,再运行main.py,就能轻松运行整个scrapy项目了。

五、douban.py具体代码

1 importscrapy2 from DouBan.items importDouBanItem3

4

5 classDouBan(scrapy.Spider):6 name = "DouBan"

7 start_urls = ["https://movie.douban.com/top250"]8

9 defparse(self, response):10 title_list = response.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[1]/a/span[1]/text()').extract()11 human_list =response.xpath(12 '//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/p[1]/text()[1]').extract()13 score_list =response.xpath(14 '//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/div/span[2]/text()').extract()15 info_list =response.xpath(16 '//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[2]/p[2]/span/text()').extract()17

18 for title, human, score, info inzip(title_list, human_list, score_list, info_list):19 item =DouBanItem()20 item["title"] =title.strip()21 item["human"] = human.strip().replace('\xa0', '').replace('\xee', '').replace('\xf6', ''),22 item["score"] =score23 item['info'] =info24 yielditem25 nextpage = response.xpath('//*[@id="content"]/div/div[1]/div[2]/span[3]/a/@href').extract()26 ifnextpage:27 yield scrapy.http.Request("https://movie.douban.com/top250" + nextpage[0], callback=self.parse)

六、运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值