scrapy基础用法

本次爬虫用来爬取http://www.xbiquge.la中的小说

scrapy startproject biquge(项目名)    创建一个爬虫项目

目录结构:

  ./biquge/

  |____ scrapy.cfg  用以记录当前项目的基础设置,settings的位置,,调度,项目名等

  |____ biquge

    |____ __init__.py  必须有

    |____ items.py  写存储字段

    |____ middlewares.py  

    |____ pipelines.py  管道文件

    |____ settings.py  爬虫设置文件

    |____ spiders

      |____ __init__.py

Scrapy中启用IP:https://blog.csdn.net/qq_34798152/article/details/79944682

./biquge/biquge/settings.py字段:

  BOT_NMAE:爬虫名

  SPIDER_MOUDLES(NEWSPIDER_MOUDLE):爬虫位置

  ROBOTSTXT_OBEY:是否遵循网站的robots.txt协议

  DOWNLOAD_DELAY:爬虫延时

  CONCURRENT_REQUESTS:爬虫并发量(默认为16)

  CONCURRENT_REQUESTS_PER_DOMAIN:如果目标域名较少,会提供并发请求数目的进一步限制

  CONCURRENT_REQUESTS_PER_IP:如果设置了本属性,CURRENT_REQUESTS_PER_DOMAIN会被忽略,这时的限制会是针对IP的。

  可把CONCURRENT_REQUESTS_PER_IP保持为默认值(0),金庸对每个IP的限制,再将CONCURRENT_REQUESTS+PER_DOMAIN设置为一个很大的值(10000)。这样设置实际上就仅用了这些限制,这样下载器的并发请求数目就只有CONCURRENT_REQUESTS来控制。

  COOKIES_ENABLED:是否启用Cookie

  TELNETCONSOLE_ENABLED:是否禁用Telent控制台

  DEFAULT_REQUEST_HEADERS:默认请求标头

  SPIDER_MIDDLEWARES:spider中间件设置

  DOWNLOADER_MIDDLEWARES:下载器中间件设置

  EXTENSIONS:扩展程序设置

  ITEM_PIPELINES:项目管道设置

  AUTOTHROTTLE_ENABLED:AutoThrottle扩展

  AUTOTHROTTLE_START_DELAY:初始下载延迟

  AUTOTHROTTLE_MAX_DELAY:高延迟情况下设置的最大延迟

  更详细字段:https://blog.csdn.net/u011781521/article/details/70188171

 

在./biquge/biquge/items.py中写需要爬取的字段结构(这里只演示获取title与对应URL):

1 import scrapy
2 
3 class UrlItem(scrapy.Item):
4     title = scrapy.Field()
5     url = scrapy.Field()

 

./biquge目录下,scrapy genspider Scrn "www.xbiquge.la"  创建一个名为"Scrn"的爬虫,指定爬取范围为www.xbiquge.la

  ./biquge/biquge/spiders

  |____ __init__.py

  |____ Scrn.py  写爬虫逻辑的主要文件

./biquge/biquge/spiders/Scrn.py中字段:

  

 1 import scrapy
 2 from biquge.items import UrlItem    #引入存储字段结构的Item类
 3 
 4 class ScrnSpider(scrapy.Spider):
 5     name = 'Scrn'   #爬虫名,再命令行用scrapy crawl 爬虫名来执行爬虫
 6     allowed_domains = ['http://www.xbiquge.la']     #爬虫的活动域
 7     start_urls = ['http://www.xbiquge.la/10/10489/']    #爬虫的起始网址,一般为想要爬取的网页地址
 8 
 9     def parse(self,response):   #默认的爬虫解析函数
10                 for each in response.xpath("//div[@id='list']/dl/dd"):  #使用xpath解析获取需要的字段
11             item = UrlItem()
12             item['title'] = each.xpath("./a/text()").extract_first()   #将解析的字段存入item 
13             item['url'] = each.xpath("./a/@href").extract_first()
14 
15             yield item  #将item抛出给管道文件处理(Pipelines.py),需要在settings文件中设置

 

在./biquge/biquge/pipelines.py中编写处理item的逻辑:

 1 import json
 2 
 3 class UrlPipeline(object):
 4     def __init__(self):
 5         self.filename = open("Url.json","wb")   #在初始化函数中打开存储数据的文件
 6     def process_item(self, item, spider):   #用于接收并处理item的方法
 7         jsontext = json.dumps(dict(item),ensure_ascii=False)+"\n"   #将传入的item用字典加载,再转为json,ensure_ascii=False用于输出中文
 8         self.filename.write(jsontext.encode("utf-8"))   #将转为json的字段写入文件
 9         return item
10     def close_spider(self,spider):  #关闭爬虫时执行
11         self.filename.close()   #关闭文件

在./biquge/biquge/settings.py中启用管道文件:

1 ITEM_PIPELINES = {
2     'biquge.pipelines.UrlPipeline': 300,
3 }

 

总体来讲:

  ./biquge/biquge/items.py文件中定义字段结构

  ./biquge/biquge/pipelines.py文件中编写存储逻辑

  ./biquge/biquge/spiders/Scrn.py文件中编写爬取逻辑,并存储到item中,再抛出(from biquge.items import UrlItem)

  ./biquge/biquge/settings.py文件中设置Scrn.py与pipelines.py文件的连接(item)

      

  

  

posted on 2019-07-29 11:29  南华  阅读(226)  评论(0编辑  收藏  举报