Scrapy框架的一些学习心得

Scrapy框架的一些学习心得

1 scrapy.cfg的作用

一个项目的配置文件的话在scrapy.cfg里面,里面配置了具体的配置文件所在的路径,以及一些url端口信息,默认的话不需要去修改

2 settings.py的作用

这个的话是具体的配置文件

2.1 爬虫文件的存放路径的话:在下面这里面配置

SPIDER_MODULES = ['itcast.spiders']
NEWSPIDER_MODULE = 'itcast.spiders'

2.2 下面的这个可以配置AGENT 的一些相关

# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'itcast (+http://www.yourdomain.com)'

2.3 默认开启的线程数为16,可以在下面的这些代码里面设置

# Configure maximum concurrent requests performed by Scrapy (default: 16)
CONCURRENT_REQUESTS = 32

2.4 默认抓取数据是不等待的,可以在下面设置

# Configure a delay for requests for the same website (default: 0)
# See http://scrapy.readthedocs.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
DOWNLOAD_DELAY = 3

2.5 下面的这个是设置怕从是否遵从某个规定的,最好不要遵循不然的话好多数据会抓不到的

# Obey robots.txt rules
# ROBOTSTXT_OBEY = True

2.6未完待续

3 class Spider(scrapy.Spider)具体的爬虫类解释

3.1 name = ‘xxxx’

这个表示当前的爬虫类的唯一表示,一个项目必须唯一,用来启动爬虫或者其他的时候用到

3.2 allowed_domains = [‘http://www.xxxx.com‘]

这个则表示当前的爬虫会在哪些域名下面抓取数据,如果不在这个域名下面的话那么就不会被抓取数据

3.3 start_urls = [‘http://www.xxxx.com‘]

起始的url地址列表,爬虫执行后第一批请求,将从这个列表获取

3.4 def parse(self, response)

这个方法会在start_urls页面之后被执行,可以在这里面执行相应的解析页面的操作,例如:

nodeList = response.xpath("//div[@class='li_txt']")

# itemList = []
for node in nodeList:
    # 创建item字段对象,用来存储信息
    item = ItcastItem()

    # 下面的返回的是一个xpath对象列表,所以需要使用extract()方法来将其转换成Unicode字符串
    name = node.xpath("./h3/text()").extract()
    title = node.xpath("./h4/text()").extract()
    info = node.xpath("./p/text()").extract()

    # 存储到item字段对象里面
    item['name'] = name[0]
    item['title'] = title[0]
    item['info'] = info[0]

    # 返回提取的每一个item数据给管道,给管道处理,然后还回来继续执行当前的for循环里面的代码
    yield item

上面的代码使用了xpath来解析页面的结构,Scrapy默认支持将数据以4中形式输出,可以通过

scrapy crawl “爬虫唯一表示名称” -o itcast.json

scrapy crawl “爬虫唯一表示名称” -o itcast.csv

还两个忘掉了,大概语法就是这样的

还可以直接将item返回给相应的管道处理,使用下面的这个代码实现

yield item

注意如果要返回给管道的话需要在settings.py文件里面将管道的配置开启

4 管道相关

4.1 pipelines.py文件的一些方法释义

def process_item(self, item, spider):
return item

默认的只有上面这一个方法的,这个方法是用来处理爬虫类里面传递来的item的,可以在里面定义自己的处理逻辑,注意下需要代码最后必须return item,item在管道里面处理完毕之后需要再传递给引擎,return item就是将处理好的item传递给引擎的,如果不 return item的话那么就会在这里中断掉,那么就会出错,再就是如果存在多个管道类的话那么return item就表示将item接着传递给下一个管道,执行那个管道的业务逻辑

再就是参数列表里面的spider就是表示传递item过来的spider对象,可以通过.name等方法查看spider的名字等信息

def __init__(self):

可以在默认的方法之外添加这个初始化方法,这个方法的话初始化一些需要初始化的东西

def close_spider(self, spider):

还可以添加这个方法,这个方法可以算是一个结束方法,里面的话可以执行一些关闭某些流等操作,类似的数据库的关闭等可以在这个方法里面执行

4.2 自定义管道的配置

可以在settings.py里面设置自定义的管道

# Configure item pipelines
# See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
    'itcast.pipelines.ItcastPipeline': 300,
}

ITEM_PIPELINES这个是一个字典,可以在里面添加自定义的管道,其中itcast表示项目名,pipelines这个表示具体的文件,ItcastPipeline表示具体的管道类,后面的300则表示有限制,范围在0-1000,值越小优先级越高

item会顺序的经过所有的管道类,然后全部经过后下一个item进来,接着进入全部的管道

5 Selectors选择器的

Selectorts有四个基本的方法,最常用的就是xpath:

xpath():传入xpath表达式,返回该列表所对应的所有节点的selectors list列表

extract():序列化该节点为Unicode字符串并返回list

css():传入css表达式,返回该表达式所对应的所有节点的selector list列表,语法同BeautifulSoup4

re():根据传入的正则表达式对数据进行提取,返回Unicode字符串list列表

6 各个文件的作用

1 爬虫文件请求是发送请求,处理响应的

2 item文件是定义字段的

3 管道文件的话是进一步处理item的

7 scrapy框架的执行顺序

1 首先执行爬虫文件,爬虫文件会根据start_urls的地址发送请求,然后得到响应

2 会执行parse方法,然后我们可以通过xpath或者正则等处理,然后存放到item中

3 可以同过yield来将item返回给管道,给管道进一步处理,如果存在多个管道的话那么这个item就会根据settings.py文件里面定义的优先级来顺序执行,直到执行完毕全部的管道

4 有下一个item的话那么久执行下一个item

5 没有的话那么就会返回给引擎

8 爬取图片注意

1 爬虫类的话需要将得到的网页地址存放在item中

2 管道类需要继承ImagesPipeline类(需要导入),然后重写get_media_requests方法,类似下面这样

def get_media_requests(self, item, info):
    imageLink = item["imageLink"]
    yield scrapy.Request(imageLink)

3 再就是需要在配置文件中配置图片的存放路径代码季下面的IMAGES_STORE部分,如果爬取的页面为手机端的页面的话那么需要设置下USER_AGENT,如下面这样,下面的这个为iphone的USER_AGENT例子

IMAGES_STORE = "/Users/yedeguo/Desktop/斗鱼图片"
# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML,' \
             ' like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25'

你可能感兴趣的:(python)