1、Xpath测试工具
https://www.toolnb.com/tools/xpath.html
2、项目介绍
利用scrapy爬虫框架实现爬起电影榜top250相关信息并用openpyxl存储于excel中
3、制作过程## 3.1、安装scrapy
pip install scrapy
3.2、创建项目
进入scrapys\spiders
文件夹
scrapy startproject scrapys
3.3、创建爬虫
scrapy genspider douban douban.com
3.4、爬虫配置
-
settings.py
由于大部分网站都进行了反爬虫措施,需要在爬虫文件中设置
DEFAULT_REQUEST_HEADERS
- 在
DEFAULT_REQUEST_HEADERS
处添加如下信息
DEFAULT_REQUEST_HEADERS = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en', "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 " "Safari/537.36 SE 2.X MetaSr 1.0" }
- 配置启用管道
ITEM_PIPELINES = { 'scrapys.pipelines.DoubanPipeline': 300, }
- 在
-
item.py
- 定义爬取字段
class DoubanItem(scrapy.Item): num = scrapy.Field() # 排名 title = scrapy.Field() # 电影名字 star = scrapy.Field() # 评分 text = scrapy.Field() # 介绍 pass
3.5、编写爬虫
-
douban.py
文件编写爬虫代码import scrapy class DoubanSpider(scrapy.Spider): name = 'douban' allowed_domains = ['douban.com'] start_urls = ['https://movie.douban.com/top250'] def parse(self, response): node_data: [] # 获取电影div节点 node_list = response.xpath('//*[@id="content"]/div/div[1]/ol/li') # print(len(node_list)) # 遍历div节点 for item in node_list: temp = {'num': item.xpath('./div/div[1]/em/text()').extract_first(), 'title': item.xpath('./div/div[2]/div[1]/a/span[1]/text()').extract_first(), 'star': item.xpath('./div/div[2]/div[2]/div/span/text()').extract_first(), 'text': item.xpath('./div/div[2]/div[2]/p[2]/span/text()').extract_first(), } # print(item) yield temp # 翻页:下一页’href信息 拼接到原网址 next_url = response.xpath('//*[@id="content"]/div/div[1]/div[2]/span[3]/a/@href').extract_first() # 判断有没有下一页 if next_url is not None: # print(next_url) next_url = "https://movie.douban.com/top250" + next_url yield scrapy.Request(next_url, self.parse)
3.6、数据存储
-
在
pipelines.py
中定义对数据的操作from openpyxl import Workbook class DoubanPipeline: def __init__(self): self.wb = Workbook() # 创建Excel工作簿 self.ws = self.wb.create_sheet("豆瓣电影Top250", 0) # 创建表单并放在最前面 self.ws.append(["豆瓣电影Top250"]) # 标题 self.ws.append(["排名", "电影名称", "评分", "一句话介绍"]) # 表头 # self.ws.append([item['num'], item['title'], item['text']]) def process_item(self, item, spider): # 测试输出 print(item['num']+' '+item['title']+'\t'+item['star']+'\t'+item['text']) # 添加数据 self.ws.append([item['num'], item['title'], item['star'], item['text']]) return item def __del__(self): self.wb.save('top250.xlsx') # 保存excel
3.7、运行爬虫
scrapy crawl douban
无日志运行
scrapy crawl douban --nolog
4、项目源码
源码 密码: kba6