上一节介绍了scrapy的安装和创建一个scrapy项目,这一节介绍scrapy的使用,以爬取豆瓣电影排名为例,总结编写程序过程中遇到的问题和学到的东西。
首先创建好的scrapy项目结构图如下: 同之前创建好的scrapy项目有所不同的是,这里多了一个自己创建的debug_config.py文件,至于这个文件的作用,我在下面会讲到
settings.py 中配置请求头,在文件第43行,默认是注释掉的
解掉注释,然后换上user-agent就可以了
spiders/douban_spider.py 中的代码如下
items.py 中的代码如下
现在来说说程序编写过程中遇到的问题
1. 提取数据时,刚开始xpath我是这样写的 //div[@class='pic']/em/text() 运行程序之后发现提取到的是重复的数据,再三尝试之后发现了问题。因为我们是从已经获取到的当前网页所有电影信息列表 movie_list 中提取来提取的数据,所以xpath应该这样写 . //div[@class='pic']/em/text() 注意我在// 前面加了一个点,表示是从当前节点下提取的数据
2.在获取下一页内容时,程序并没有执行,刚开始以为是url的问题,在终端中查看打印的url的时候,发现url并没有错,后来发现是 allowed_domains 的问题。之前提到 allowed_domains 是用来限制我们爬取的域名,规定爬虫只爬取这个域名下的网页,而跟allowed_domains 的值不匹配的url将被忽略。我刚开始写的是 allowed_domains = [" www.douban.com"] , 而我们请求的url是
https://movie.douban.com/top250 ,所以才会没有进行下一页请求。这里一定要注意,allowed_domains的值一定要跟https:// .*? /
中的内容相匹配
3.经过上面两个问题之后,我发现scrapy项目想要找到bug很麻烦,因为它是通过终端命令运行的,所以pycharm控制台并不会打印错误信息, 这给我们找bug带来很大不便。于是我在网上找了很多资料,发现是可以设置scrapy项目在pycharm中调试的,具体方法如下:
首先在settings.py 文件的同级目录下创建一个.py文件,文件名可以随意,但是要见名知意,我这里起的 debug_config.py
然后打开文件,输入以下内容:
然后在spider程序中需要的地方打上断点,在debug_config文件中右键 debug,我们就可以在控制台看到程序运行输出的信息了