Scrapy安装
- Linux
- pip install scrapy
- Windows
- pip install wheel
- 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
- 进入第二步下载文件目录,pip install 下载的文件名
- pip install pywin2
- pip install scrapy
创建项目、爬虫文件
- 新建项目
scrapy startproject crawPro
- 新建爬虫文件
进入爬虫项目目录 cd crawPro
scrapy genspider -t craw5i5j www.xxx.com #www.xxx.com为起始url,后面爬虫文件会注释掉
编写爬虫文件
- 注释起始url
- 因爬虫地址第一页和第二页url不一致,所以新增加一个规则解析器,规则解析器使用正则表达式
- 参数:follow = True表示跟随。就会渠道全部页码
- 参数:callback='parse_item',回调函数表示每一个URL的返回数据,都需要parse_item方法进行解析
- 参数:response返回的数据类型为select类型,取值需要使用extract_first()表示取第一个值,extract()取多个值,返回数据类型为list
- 文件:items中需要定义参数,见代码
- 导入item :from crawPro.items import CrawproItem;实例化item = CrawproItem(),把解析的值装入item
- 最后需要:yield item ,把值传入items
- craw5i5j.py代码
# -*- coding: utf-8 -*- import scrapy from scrapy.linkextractors import LinkExtractor # 链接提取器 from scrapy.spiders import CrawlSpider, Rule # Rule规则解析器对象 from crawPro.items import CrawproItem class Craw5i5jSpider(CrawlSpider): name = 'craw5i5j' # allowed_domains = ['www.xxx.com'] start_urls = ['https://nj.5i5j.com/xiaoqu/pukouqu/'] # 链接提取器:前提follow=False,作用就是用来提取起始URL对应页面中符合要求的链接 # 参数 allow是一个正在表达式。 link = LinkExtractor(allow=r'^https://nj.5i5j.com/xiaoqu/pukouqu/n\d+/$') link1 = LinkExtractor(allow=r'^https://nj.5i5j.com/xiaoqu/pukouqu/$') rules = ( # 规则解析器对象 LinkExtractor实例化链接提取器、callback回调函数 Rule(link, callback='parse_item', follow=True), Rule(link1, callback='parse_item', follow=True), ) def parse_item(self, response): for li in response.xpath('//div[@class="list-con-box"]/ul/li'): xq_name = li.xpath(".//h3[@class='listTit']/a/text()").extract_first().strip() xq_chengjiao = li.xpath(".//div[@class='listX']/p/span[1]/a/text()").extract_first().strip() xq_danjia = li.xpath(".//div[@class='listX']/div[@class='jia']/p[@class='redC']//text()").extract_first().strip() xq_zongjia =li.xpath(".//div[@class='listX']/div[@class='jia']/p[2]/text()").extract_first().strip() item = CrawproItem() item['xq_name'] = xq_name item['xq_chengjiao'] = xq_chengjiao item['xq_danjia'] = xq_danjia item['xq_zongjia'] = xq_zongjia yield item