scrapy框架之crawlspider
spider.py
# 项目名为wxapp,爬虫名为wxapp_spider.py from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule from wxapp.items import WxappItem # 导入items中定义好的数据类,方便json格式写入 class WxappSpiderSpider(CrawlSpider): name = 'wxapp_spider' allowed_domains = ['wxapp-union.com'] start_urls = ['http://www.wxapp-union.com/portal.php?mod=list&catid=2&page=1'] # 从第一页开始 rules = ( # Rule 1用于从开始页面向后面找到相同模式的url,所以follw选择True, Rule(LinkExtractor (allow=r'.+mod=list&catid=2&page=\d+'), follow=True), # Rule 2用于在Rule 1模式的页面下,找到真正需要解析数据的url,回调函数一定要改名字。 Rule(LinkExtractor(allow=r'.+/article-.+\.html'), callback='parse_info', follow=False),) def parse_info(self, response): title = response.xpath(r"//h1[@class='ph']/text()").get() #获取标题 author = response.xpath(r"//p[@class='authors']/a/text()").get() # 获取作者 contents = response.xpath(r"//td[@id='article_content']//text()").getall() # 获取内容 因为td下面还有很多标签所以要用//text() 之后再.getall() content = ''.join(contents).strip() # 巧妙用法 join将列表中的每一项依次放入 加上.strp() 去掉多余的换行和空格 info = WxappItem(title=title, author=author, content=content) #创建info对象 yield info # 推送给pipelines.py
多个rule下,先执行rule1,然后再rule1提取的相应页面再执行rule2,后回调给parse_info处理。
LinkExtractor
LinkExtractor 是scrapy模块下的链接提取器,包含以下参数:
class scrapy.linkextractors.LinkExtractor( allow = (), deny = (), allow_domains = (), deny_domains = (), deny_extensions = None, restrict_xpaths = (), tags = ('a','area'), attrs = ('href'), canonicalize = True, unique = True, process_value = None )
主要参数讲解:
allow:允许的url。所有满足这个正则表达式的url都会被提取。
deny:禁止的url。所有满足这个正则表达式的url都不会被提取。
allow_domains:允许的域名。只有在这个里面指定的域名的url才会被提取。
deny_domains:禁止的域名。所有在这个里面指定的域名的url都不会被提取。
restrict_xpaths:严格的xpath。和allow共同过滤链接。
unique: 规定是否去重链接
使用时要先导入:
from scarpy.linkextractor import LinkExtractor
Rule规则类:
定义爬虫的规则类。以下对这个类做一个简单的介绍:
class scrapy.spiders.Rule(
link_extractor,
callback = None,
cb_kwargs = None,
follow = None,
process_links = None,
process_request = None
)
主要参数讲解:
link_extractor:一个LinkExtractor对象,用于定义爬取规则。
callback:满足这个规则的url,应该要执行哪个回调函数。因为CrawlSpider使用了parse作为回调函数,因此不要覆盖parse作为回调函数自己的回调函数。
follow:指定根据该规则从response中提取的链接是否需要跟进。
process_links:从link_extractor中获取到链接后会传递给这个函数,用来过滤不需要爬取的链接。
保存数据为csv,只需在setting.py中添加代码:
FEED_URI='./storage/data/%(name)s.csv' FEED_FORMAT='CSV' FEED_EXPORT_ENCODING='ansi'
- python框架Scrapy中crawlSpider的使用
- 【Scrapy框架之CrawlSpider全站爬取】
- python框架Scrapy中crawlSpider的使用——爬取内容写进MySQL
- Scrapy框架快速执行cmd命令:‘scrapy crawl qsbk_spider’
- python爬虫入门(八)Scrapy框架之CrawlSpider类
- Scrapy爬虫框架学习笔 二 CrawlSpider的使用
- Scrapy框架之CrawlSpider
- Scrapy框架之CrawlSpider
- Python爬虫-Scrapy框架(四)- 内置爬虫文件 - 4.2 初探Crawl Spider
- python3 scrapy框架crawl模版爬取京东产品并写入mysql
- scrapy框架系列 (5) Spider类
- scrapy框架爬取微博之spider文件
- scrapy爬虫学习日志[crawl框架爬取pexels图片]
- Scrapy CrawlSpider demo
- python爬虫框架scarpy之AttributeError: module 'scrapy' has no attribute 'spider'
- 使用python的scrapy框架,spider与pipelines的调用
- 爬虫------scrapy 框架--Spider、CrawlSpider(规则爬虫)
- 六.scrapy crawlspider
- scrapy crawlspider 腾讯招聘
- 爬虫框架scrapy 1个piplines 对应多个spider,并且分别处理