Scrapy简介

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。

Scrapy入门请看官方文档:scrapy官方文档

本爬虫简介

本爬虫实现按分类爬取豆瓣电影信息,一次爬取一个分类,且自动切换代理池,防止ip在访问过多过频繁后无效。
分类如图所示:

实现-scrapy中间件

scrapy基础框架参考上面的官方教程,搭建好基础框架后,本爬虫特殊之处在于为了防止爬虫被封,采用了轮换代理和agent的中间件。

agent轮换池:

简单的写一个user_agent_list来使得每次的agent不同,原理简单,代码如下:
class RotateUserAgentMiddleware(UserAgentMiddleware):  #轮换代理agentdef __init__(self, user_agent=''):self.user_agent = user_agentdef process_request(self, request, spider):ua = random.choice(self.user_agent_list)if ua:#print '-----------------------Using user-agent:', ua, '------------------------'request.headers.setdefault('User-Agent', ua)# the default user_agent_list composes chrome,IE,firefox,Mozilla,opera,netscape# for more user agent strings,you can find it in http://www.useragentstring.com/pages/useragentstring.phpuser_agent_list = [ \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1" \"Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11", \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6", \"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6", \"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1", \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5", \"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5", \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", \"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", \"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", \"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", \"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", \"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3", \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24", \"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"]

ip轮换池:

采用了一位大神cocoakekeyu写的中间件Github地址,并不认识他,但是为他点赞。代码在这里不贴了,可以去Github看。
“一个用于scrapy爬虫的自动代理中间件。可自动抓取和切换代理,自定义抓取和切换规则。”


实现-爬虫实现

item.py

class DoubanItem(scrapy.Item):movie_name = scrapy.Field()movie_director = scrapy.Field()movie_writer = scrapy.Field()movie_starring = scrapy.Field()movie_category = scrapy.Field()movie_country = scrapy.Field()#movie_language = scrapy.Field()movie_date = scrapy.Field()movie_time = scrapy.Field()movie_star = scrapy.Field()movie_5score = scrapy.Field()movie_4score = scrapy.Field()movie_3score = scrapy.Field()movie_2score = scrapy.Field()movie_1score = scrapy.Field()movie_describe = scrapy.Field()pass

看这item名都不用我解释...

doubanlist_spider.py

先贴上代码:
class doubanlistSpider(scrapy.Spider):name = "doubanlist"allowed_domains = ["movie.douban.com"]start_urls = ["https://movie.douban.com/tag/%E5%8A%A8%E7%94%BB"]def parse(self, response):for href in response.xpath('//a[@class="nbg"]/@href'):url = href.extract()yield scrapy.Request(url, callback=self.parse_each_movie)next_page = response.xpath('//span[@class="next"]/a/@href').extract()if next_page:print '--------------Finding next page: [%s] --------------------------', next_pageyield scrapy.Request(next_page[0], callback=self.parse)else:print '--------------There is no more page!--------------------------'def parse_each_movie(self, response):item = DoubanItem()item['movie_name'] = response.xpath('//span[@property="v:itemreviewed"]/text()').extract()item['movie_director'] = response.xpath('//a[@rel="v:directedBy"]/text()').extract()item['movie_writer'] = response.xpath('//span[@class="attrs"][2]/a/text()').extract()item['movie_starring'] = response.xpath('//a[@rel="v:starring"]/text()').extract()item['movie_category'] = response.xpath('//span[@property="v:genre"]/text()').extract()#item['movie_language'] = response.xpath('//*[@id="info"]').re(r'</span> (.*)<br>\n')[2]item['movie_date'] = response.xpath('//span[@property="v:initialReleaseDate"]/text()').extract()item['movie_time'] = response.xpath('//span[@property="v:runtime"]/text()').extract()item['movie_star'] = response.xpath('//strong[@property="v:average"]/text()').extract()item['movie_5score'] = response.xpath('//span[@class="rating_per"][1]/text()').extract()item['movie_4score'] = response.xpath('//span[@class="rating_per"][2]/text()').extract()item['movie_3score'] = response.xpath('//span[@class="rating_per"][3]/text()').extract()item['movie_2score'] = response.xpath('//span[@class="rating_per"][4]/text()').extract()item['movie_1score'] = response.xpath('//span[@class="rating_per"][5]/text()').extract()item['movie_describe'] = response.xpath('//*[@id="link-report"]/span/text()').re(r'\S+')check_item = response.xpath('//*[@id="info"]').re(r'</span> (.*)<br>\n')[1]result = self.check_contain_chinese(check_item)if result:item['movie_country'] = response.xpath('//*[@id="info"]').re(r'</span> (.*)<br>\n')[1]else:item['movie_country'] = response.xpath('//*[@id="info"]').re(r'</span> (.*)<br>\n')[2]yield itemdef check_contain_chinese(self, check_str):for ch in check_str.decode('utf-8'):if u'\u4e00' <= ch <= u'\u9fff':return Truereturn False
def parse(self, response):从https://movie.douban.com/tag/%E5%8A%A8%E7%94%BB(某一特定分类)开始,爬取20条本页的电影,之后判定“下一页”按钮是否存在,如果存在则继续爬取下一页。
def parse_each_movie(self, response):对于每个电影详细页,爬取所需要的信息,全部使用xpath
中间一段是在爬取电影国家信息时,由于有不同情况的网页(可能是新老页面交替),需要不同处理,不然会爬到不正确的信息,xpath定位不准。
def check_contain_chinese:为了确定爬取的中文内容为中文字符串,需要进行判断。

总结

具体项目请查看:https://github.com/qqxx6661/scrapy_yzd

我爱周雨楠

【scrapy】scrapy按分类爬取豆瓣电影基础信息相关推荐

  1. Python爬虫入门 | 7 分类爬取豆瓣电影,解决动态加载问题

      比如我们今天的案例,豆瓣电影分类页面.根本没有什么翻页,需要点击"加载更多"新的电影信息,前面的黑科技瞬间被秒--   又比如知乎关注的人列表页面:   我复制了其中两个人昵称 ...

  2. python爬取豆瓣电影信息可行性分析_Python爬虫实现的根据分类爬取豆瓣电影信息功能示例...

    本文实例讲述了Python爬虫实现的根据分类爬取豆瓣电影信息功能.分享给大家供大家参考,具体如下: 代码的入口:if __name__ == '__main__': main()#! /usr/bin ...

  3. python BeautifulSoup爬取豆瓣电影top250信息并写入Excel表格

    豆瓣是一个社区网站,创立于2005年3月6日.该网站以书影音起家,提供关于书籍,电影,音乐等作品信息,其描述和评论都是由用户提供的,是Web2.0网站中具有特色的一个网站. 豆瓣电影top250网址: ...

  4. Requests库实战(三)---爬取豆瓣电影详细信息

    完整代码 爬取豆瓣电影的详细信息 地址:豆瓣电影动画 向下滑动时新增的数据也是Ajax请求,原理和上一个项目是一样的.唯一的不同是此处请求url携带了多个参数 import requests impo ...

  5. 【爬虫实践】记一次Scrapy框架入门使用爬取豆瓣电影数据

    本次的学习分享主要是使用一次Scrapy框架,毕竟在很多次的时候,自己在提取一些或是需要实验数据的时候,数据量要求不大,很快便能通过简单的request等库进行调用,然后获取数据. 这次,则是想要使用 ...

  6. Python爬虫新手入门教学(一):爬取豆瓣电影排行信息

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...

  7. 简单爬取豆瓣电影相关信息

    平台:pycharm 目标:爬取豆瓣网页电影名称,评分等信息,并存储存在csv文件中 代码(代码中的url和headers获取方法在下) import re import requests impor ...

  8. Python Scrapy 爬虫入门: 爬取豆瓣电影top250

    一.安装Scrapy cmd 命令执行 pip install scrapy 二.Scrapy介绍 Scrapy是一套基于Twisted的异步处理框架,是纯python实现的爬虫框架,用户只需要定制开 ...

  9. Python爬虫学习---------根据分类爬取豆瓣电影的电影信息

    代码的入口: if __name__ == '__main__': main() #! /usr/bin/python3 # -*- coding:utf-8 -*- # author:Sirius. ...

  10. 杀鸡用用牛刀 scrapy框架爬取豆瓣电影top250信息

    文章目录 一.分析网页 二.scrapy爬虫 三.处理数据 原文链接:https://yetingyun.blog.csdn.net/article/details/108282786 创作不易,未经 ...

最新文章

  1. 嵌入式定制开发合作伙伴应该这样选择
  2. 修复.NET的HttpClient
  3. 学习笔记----周志华《机器学习》第五章(神经网络)(二)
  4. 构造函数失败_抛出异常
  5. Hibernate bean 对象配制文件
  6. 详解tomcat的连接数与线程池--转载
  7. 那些年使用Android studio遇到的问题
  8. 服务器 '' 上的 MSDTC 不可用。
  9. MTPA仿真实现和一些比较
  10. GymBase英文版主题-健身主题-WordPress响应式
  11. 支付宝对账单功能开发
  12. 麒麟子Cocos Creator实用技巧九:棋牌UI全分辨率适配方案
  13. LabVIEW formula node
  14. 面试时怎样做精彩的自我介绍
  15. Xcode遇到couldn’t be opened because you don’t have permission to view it.解决方法
  16. MySQL之——MSS主从复制(读写分离)实现
  17. 怎么把图片压缩到30k以内?如何图片压缩到指定大小?
  18. 签名 html5,在HTML5表单中使用涂写签名
  19. 部署Twikoo评论系统及其邮件推送(Vercel)
  20. 文本过长时中间部分用省略号表示。

热门文章

  1. 数据挖掘-高斯混合模型(多元)算法的R实现
  2. MATLAB 的串口连接
  3. charls https抓包
  4. 使用electron开发了一个excel对比工具
  5. java企业公文流转系统ssm框架
  6. m3u8视频下载工具
  7. (ICPR-2021)使用胶囊的多尺度部分表示变换的步态识别
  8. 淘宝爬登录、取个人资料、微博绑定、收货地址、支付宝绑定设置、安全设置等信息、购物车、收藏宝贝和店铺、个人积分、退款维权、我的足迹...
  9. 以风险管理思想构建关键信息基础设施风险评估重器
  10. dep指定版本 go_golang 官方依赖管理工具 dep 使用和持续集成