# doubanFilmScrapyProject **Repository Path**: zuiige/doubanFilmScrapyProject ## Basic Information - **Project Name**: doubanFilmScrapyProject - **Description**: No description available - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-04-05 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 前言 学习慕课网[Python最火爬虫框架Scrapy入门与实践](https://www.imooc.com/learn/1017)课程笔记 + scrapy1.5中文文档(http://www.scrapyd.cn/doc/) # 准备工作 ## 安装环境 python3.5 Ubuntu16.4 python3.7 win10 ### Ubuntu服务器上安装scrapy,````出现: ``` You are using pip version 9.0.1, however version 18.0 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command ``` 按提示输入``python3 -m pip install -U pip`` 出现: ``` Traceback (most recent call last): File “/usr/bin/pip3”, line 9, in from pip import main ``` 修改文件/usr/bin/pip3 ```python from pip import main if __name__ == '__main__': sys.exit(main()) ``` 改为 ```python from pip import __main__ if __name__ == '__main__': sys.exit(__main__._main()) ``` win10控制台输入scrapy出现以下错误 ``` E:\ λ scrapy 'scrapy' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 ``` 使用如下命令访问: ``` python -m scrapy ``` # Scrapy介绍 Scrapy是一套基于Twisted的一部处理框架,是纯python实现的爬虫框架,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容或各种图片。 # Scrapy项目实战 ## 目标 抓取豆瓣电影top250数据,并将数据保存为csv,json和存储到mongo数据库中。 目标站点``https://movie.douban.com/top250`` ## Scrapy抓取步骤 1. 新建项目 2. 明确内容 3. 制作爬虫 4. 存储内容 ### 新建项目 新建项目``scrapy startproject douban`` 新建爬虫文件 使用命令``scrapy genspider douban_spider movie.douban.com``在spider目录下创建douban_spider.py文件 ### 明确目标 打开网站,明确需要爬取的目标 ### 编写spider文件 服务器端直接运行`` scrapy crawl douban_spider`` 在本地编写main.py文件直接运行 ```python from scrapy import cmdline cmdline.execute('scrapy crawl douban_spider'.split()) ``` 通过xPath解析页面节点 ``//div[@class='article']//ol[@class='grid_view']/li`` ### 数据存储 scrapy crawl douban_spider -o test.csv scrapy crawl douban_spider -o test.json # ip代理中间件 两种伪装的方式 1. 设置代理ip 阿布云 在``middlewares.py``文件编写 ```python class my_proxy(object): def process_request(self,request,spider): request.meta['proxy'] = 'ip:port' proxy_name_pass = b'yonghuming:mima' encode_pass_name = base64.b64decode(proxy_name_pass) request.headers['Proxy-Authorization'] = 'Basic ' + encode_pass_name.decode() ``` 2. 设置随机useragent ```python class my_useragent(object): def process_request(self,request,spider): USER_AGENT_LIST = [ 'MSIE (MSIE 6.0; X11; Linux; i686) Opera 7.23', 'Opera/9.20 (Macintosh; Intel Mac OS X; U; en)', 'Opera/9.0 (Macintosh; PPC Mac OS X; U; en)', 'iTunes/9.0.3 (Macintosh; U; Intel Mac OS X 10_6_2; en-ca)', 'Mozilla/4.76 [en_jp] (X11; U; SunOS 5.8 sun4u)', 'iTunes/4.2 (Macintosh; U; PPC Mac OS X 10.2)', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.0) Gecko/20100101 Firefox/5.0', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20100101 Firefox/9.0', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20120813 Firefox/16.0', 'Mozilla/4.77 [en] (X11; I; IRIX;64 6.5 IP30)', 'Mozilla/4.8 [en] (X11; U; SunOS; 5.7 sun4u)' ] agent = random.choice(USER_AGENT_LIST) request.headers['User_Agent'] = agent ``` # 注意事项 + 中间件定义完成要在setting文件内启用 + 爬虫文件名和爬虫名称不能相同,spider目录内不能存在相同爬虫名称的项目文件