scrapy创建爬虫
原理:

步骤:
- scrapy环境安装(默认已有Python环境和pi包管理工具
- 创建工程
- 创建爬虫文件
先导航到已创建的工程下,然后再创建爬虫文件
1 2
| cd 项目名 scrapy genspider fileName 目标网站
|
在 items.py 里定义需要抓取的数据属性
运行程序测试
1
| scrapy crawl 爬虫名(fileName)
|
- 配置启动文件main.py:(可省略此步骤)
1 2 3
| from scrapy import cmdline
cmdline.execute('scrapy crawl 爬虫名'.split())
|
- 利用xpath编写解析文件(主要获取节点信息),编写xpath规则:(也可自主使用其他解析工具)
1 2
| //div[@class='article']//ol[@class='grid_view']/li 注:先定位到目标的上一级在进行解析
|
- 在爬虫文件里定义解析名,使用response调用xpath写入xpath规则:
1
| movie_list = response.xpath("//div[@class='article']//ol[@class='grid_view']/li")
|
- 根据上一级步骤7解析的结果进一步获取目标信息(从items里我们自定的目标名进行获取),分别进行目标结果的解析:继续编写xpath解析
1 2 3
| douban_item['serial_number'] = i_item.xpath(".//div[@class='item']//em/text()").extract_first() 注://前的.不能缺少
|
- 目标数据获取解析完成后回传存储数据:
- 翻页设置(根据需要)同步骤9一样获取xpath解析,然后逐个翻页:
1 2 3
| if next_link: next_link = next_link[0] yield scrapy.Request("https://movie.douban.com/top250"+next_link, callback=self.parse)
|
爬虫页完整代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| import scrapy from douban.items import DoubanItem
class DoubanSpiderSpider(scrapy.Spider): name = 'douban_spider' allowed_domains = ['movie.douban.com'] start_urls = ['https://movie.douban.com/top250'] def parse(self, response): movie_list = response.xpath("//div[@class='article']//ol[@class='grid_view']/li") for i_item in movie_list: douban_item = DoubanItem() douban_item['serial_number'] = i_item.xpath(".//div[@class='item']//em/text()").extract_first() douban_item['movie_name'] = i_item.xpath(".//div[@class='info']/div[@class='hd']/a/span[1]/text()").extract_first() content = i_item.xpath(".//div[@class='info']//div[@class='bd']/p[1]/text()").extract() for i_content in content: content_s = "".join(i_content.split()) douban_item['introduce'] = content_s douban_item['star'] = i_item.xpath(".//span[@class='rating_num']/text()").extract_first() douban_item['evaluate'] = i_item.xpath(".//div[@class='star']/span[4]/text()").extract_first() douban_item['describe'] = i_item.xpath(".//span[@class='inq']/text()").extract_first() yield douban_item next_link = response.xpath("//span[@class='next']/link/@href").extract() if next_link: next_link = next_link[0] yield scrapy.Request("https://movie.douban.com/top250"+next_link, callback=self.parse)
|
添加浏览器标识(有的网站也可不用添加就能访问)
打开 settings.py 取消 USER_AGENT 的注释,打开浏览器里按F12,找到 USER_AGENT 复制到 settings 文件中
数据清洗 re.S 可以去除空白字符
转为JSON类型存储:json.dumps(str,ensure_ascii=False,indent=4)
·