Scrapy中遇到的坑

看网上对Scrapy的评价挺高,想学习一下,中间肯定会遇到各种问题,单独开一篇来记录学习中遇到的坑吧。

1.安装就遇到问题,醉了
网上找的安装方法,还是有问题,最后stackoverflow找到的解决方案

Package libffi was not found in the pkg-config search path.

解决方案 sudo apt-get install libffi-dev

2 . ubuntu下用pycharm进行开发,配置过程如下
<1> 配置运行变量,自己新建一个名称
Run -> Edit Configurations -> + -> Python -> Script: /usr/local/bin/scrapy
<2> 运行方法
项目根目录新建一个main.py文件,写入要运行的spider

from scrapy import cmdline
cmdline.execute("scrapy crawl dmoz".split())

这样即可运行main.py进行爬虫

3 . 发现没有xpath的知识
记录一下语法

nodename    选取此节点的所有子节点。
/   从根节点选取。
//  从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.   选取当前节点。
..  选取当前节点的父节点。
@   选取属性。

4 .项目中文件的作用
scrapy.cfg: 项目配置文件
tutorial/: 项目python模块, 呆会代码将从这里导入
tutorial/items.py: 项目items文件
tutorial/pipelines.py: 项目管道文件
tutorial/settings.py: 项目配置文件
tutorial/spiders: 放置spider的目录

5 .自定义Spider,要重写的变量和方法

    name:爬虫的识别名,它必须是唯一的,在不同的爬虫中你必须定义不同的名字.
    start_urls:爬虫开始爬的一个URL列表。爬虫从这里开始抓取数据,所以,第一次下载的数据将会从这些URLS开始。其他子URL将会从这些起始URL中继承性生成。
    start_requests方法 ,自定义规律的url,通过父类方法yield self.make_requests_from_url(url)添加url,
    parse():调用时候传入从每一个URL传回的Response对象作为参数,response将会是parse方法的唯一的一个参数,通过yield Request(movie_link[0],callback=self.parse_item)
       把子url传递给parse_item方法。相当于二级url。

    parse_item是我们自定义的方法,用来处理新连接的request后获得的response

    parse_item中提取出我们想要的item
    parse之后调用yield item或者return item, 把item返回给pipelines,

    pipelines中的process_item()来处理数据,用于存放数据库或者文件

6 . import sys
reload(sys)
#python默认环境编码时ascii
sys.setdefaultencoding(“utf-8”)

line.decode(“unicode_escape”)编码转换

7 . request方法的源码
def init(self, url, callback=None, method=’GET’, headers=None, body=None,
cookies=None, meta=None, encoding=’utf-8’, priority=0,
dont_filter=False, errback=None):

8 . response方法的源码
def init(self, url, status=200, headers=None, body=”, flags=None, request=None):

9 . pipelines的配置
settings文件中
ITEM_PIPELINES = {
‘RichardScrapy.pipelines.RichardscrapyPipeline’: 300,
}
默认时注释掉的,需要手动改一下

10 .用xpath真是费眼,还是正则好用点(好吧,我错了,chrome浏览器中可以直接copy xpth,无知真可怕。。。2016/7/15)
12 . 学习参考网址
http://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/shell.html
http://www.cnblogs.com/Shirlies/p/4536880.html
http://www.w3school.com.cn/xpath/xpath_syntax.asp

Add:
1. 访问某个网址试了n多方法,更换agent,禁用cookie等等,还是不行,查了半天知道—ROBOTSTXT_OBEY设置是否尊重网站的robots.txt,默认为True,就会出现forbidden by robots.txt的问题

猜你喜欢

转载自blog.csdn.net/wuzhiguo1314/article/details/51324117