初识scrapy框架

Scrapy是Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。

1安装框架

pip3 install scrapy

基于anconda下,不妨新建一个环境,取名为spider专门用于爬虫环境

conda create -n spider python=3.6

激活进入环境

conda activate spider 

2 新建一个爬虫
在cmd下,执行scrapy startproject XXXX创建一个名为XXXX的爬虫
scrapy.cfg:配置文件
spiders:存放你Spider文件,也就是你爬取的py文件
items.py:相当于一个容器,和字典较像
middlewares.py:定义Downloader Middlewares(下载器中间件)和Spider Middlewares(蜘蛛中间件)的实现
pipelines.py:定义Item Pipeline的实现,实现数据的清洗,储存,验证。
settings.py:全局配置

cmd进入到spiders文件中,执行scrapy genspider 文件名 要爬取的网址就会在文件夹中生成一个 文件名.py 框架已经写好了所需要的内容,当然你也可以手动创建,但需要自行补全代码,到此,爬虫新建完毕

3 完善

class SpiderSpider(scrapy.Spider):
    name = 'spider'
    allowed_domains = []
    start_urls = []

allowed_domains 是你刚才创建的时候填写的网址 爬虫只会在此网页下爬取内容
start_urls为爬取的目标网页
当然start_urls是一个列表,所以可以有多个网址,scrapy可以获取当前网页中的所以a标签即所有网页,便于爬取诸如下一页的任务,但大多数网页都可以推出来规律,可以根据规律遍历生成网址。
接下来需要在items.py中声明item变量,每新建一个下列语句就对应了一个爬取对象

xxx=scrapy.Field()

然后再回到创建的py文件中完善方法

    def parse(self, response):
        item=WagesItem()#记得import
        for i in range(2,41):
	        item['title']=response.xpath('//*[@class="container"]/div/div/div/ul/li[{}]/div[1]/div/span/a/text()'.format(int(i))).extract()
	        item['salary']=response.xpath('//*[@class="container"]/div/div/div/ul/li[{}]/div[1]/div/p/span[1]/text()'.format(int(i))).extract()[0]
	        item['place']=response.xpath('//*[@class="container"]/div/div/div/ul/li[{}]/div[1]/div/p/a/text()'.format(int(i))).extract()
	        item['education']=response.xpath('//*[@class="container"]/div/div/div/ul/li[{}]/div[1]/div/p/span[2]/text()'.format(int(i))).extract()
	        item['experience']=response.xpath('//*[@class="container"]/div/div/div/ul/li[{}]/div[1]/div/p/span[3]/text()'.format(int(i))).extract()
	        item['types']=response.xpath('//*[@class="container"]/div/div/div/ul/li[{}]/div[1]/div[2]/p[2]/span/text()'.format(int(i))).extract()
	        yield item#生成

scrapy提供了多种定位方法,可以看一下文档。
在该文件夹下,cmd运行:scrapy crawl 项目的名字
即可开始爬取start_urls中的所有网址
也可以执行如下命令生成一个data,csv(名字随意启) 且指定编码,否则打开的csv可能是乱码,当然这也可以再setting.py中配置,

scrapy crawl spider -o data.csv -s FEED_EXPORT_ENCODING=GBK

setting.py可以设置如header头和其他一些东西。如果有时候访问网址失败,且cmd打印的每个网址都状态码的时候可以使用HTTPERROR_ALLOWED_CODES = []解决,列表中为返回的数字状态码。

发布了71 篇原创文章 · 获赞 204 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_44198436/article/details/104300181