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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |