本文将介绍使用scrapy爬取虎扑话题区的标题的过程
安装scrapy
可以使用pip安装或者在pycharm中解释器设置中安装-
创建一个scrapy项目
使用命令行工具切换至想要创建项目的目录,然后执行命令scrapy startproject hupu
随后使用pycharm打开所创建的项目,即可看到自动生成了以下文件夹和文件
1.png
注意spiders文件夹下的hupucrawl.py是我们自己手动创建的,随后我们将在此编写爬虫主程序
-
配置爬虫
对于一个简单的爬虫,我们只需要编写爬虫主程序,配置items文件即可-
配置items
# -*- coding: utf-8 -*- # Define here the models for your scraped items # # See documentation in: # https://docs.scrapy.org/en/latest/topics/items.html import scrapy class HupuItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() topic=scrapy.Field()
在items文件中已经生成了框架和帮助信息,我们只需要按照提示,添加topic=scrapy.Field()即可,用于接收对话题的爬取结果,可根据需要添加更多对象
-
编写主程序
主程序需要我们在spiders文件夹下手动创建文件进行编写,先看代码,再进行解释from scrapy import Request from scrapy.spiders import Spider from hupu.items import HupuItem class HupuSpider(Spider): name='hs' headers={'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36'} allowed_domains=['hupu.com'] start_urls=['https://bbs.hupu.com/vote'] page=2 def parse(self, response): lines = response.xpath( "//ul[@class='for-list']/li/div[@class='titlelink box']/a[@class='truetit']/text()").extract() for line in lines: item = HupuItem() item['topic'] = line yield item while self.page<6: next_url='https://bbs.hupu.com/vote-'+str(self.page) self.page+=1 yield Request(next_url,callback=self.parse)
导入需要的文件
-
创建一个HupuSpider的类,可以配置爬虫的基本信息
- name 是爬虫的名字,在启动爬虫时需要用的,不要混淆
- headers 配置爬虫的请求头,可以绕过一般的反爬虫机制
- allowed_domains 表示允许爬虫的域名
- start_urls 表示爬虫的起始URL
- page 设置一个变量用于后续的翻页
-
定义parse函数对网页内容进行解析
-
lines = response.xpath( "//ul[@class='for-list']/li/div[@class='titlelink box']/a[@class='truetit']/text()").extract()
使用xpath语法提取内容,可以使用浏览器的检查元素功能得到要爬取的内容在网页源代码中的位置,更简单的方法是找到目标后右键直接copy xpath
2.png
-
-
- 在得到lines这个列表之后,就可以使用for循环,逐一将内容返回到创建的item中去,注意要使用yield进行返回,它表示返回后程序仍将继续执行
- 设置翻页,本文将爬取前五页,可以利用先前设置的page变量进行循环拼接出下一页的url,同样要使用yield进行返回
-
使用命令行启动爬虫
scrapy crawl hs -o result.csv
表示启动的爬虫名字是hs,将结果输出到result.csv中
后续处理
此时我们已经得到了需要的内容,可以根据需要对数据进行下一步处理