scrapy分页抓取网页(用Python实现一个mySpider文件夹文件夹 )
优采云 发布时间: 2022-01-20 21:21scrapy分页抓取网页(用Python实现一个mySpider文件夹文件夹
)
什么是 Scrapy
Scrapy 是一个用 Python 编写的应用程序框架,用于爬取 网站 数据并提取结构化数据。 Scrapy 常用于数据挖掘、信息处理或存储历史数据等一系列程序中。通常我们可以通过Scrapy框架轻松实现爬虫,抓取指定网站的内容或图片。
安装
pip install scrapy
直到下载完成
新项目
scrapy startproject mySpider #mySpider就是爬虫项目名称
使用以下目录结构创建一个 mySpider 文件夹:
scrapy.cfg: 项目的配置文件。
mySpider/: 项目的Python模块,将会从这里引用代码。
mySpider/items.py: 项目的目标文件。
mySpider/pipelines.py: 项目的管道文件。
mySpider/settings.py: 项目的设置文件。
mySpider/spiders/: 存储爬虫代码目录。
具体的抓取内容/目标
目标:获取传知播客课程培训教研组网站所有讲师的姓名、职称和个人信息。
mySpider/items.py,创建ItcastItem类,构建item模型。
import scrapy
class MyspiderItem(scrapy.Item):
name = scrapy.Field()
title = scrapy.Field()
info = scrapy.Field()
创建一个爬虫
cd mySpider #首先进入该文件夹
scrapy genspider itcast "itcast.cn" #创建爬虫
在mySpider/spider中自动生成python文件:itcast.py
参数说明:
1、name = "" : 这个爬虫的标识名必须是唯一的,不同的爬虫必须定义不同的名字
2、allow_domains = []是搜索的域名范围,也就是爬虫的禁区。规定爬虫只爬取该域名下的网页,不存在的URL会被忽略。
3、start_urls = () : URL 元组/抓取的 URL 列表。爬虫从这里开始抓取数据,所以数据的第一次下载将从这些 url 开始。其他子 URL 将继承自这些起始 URL。
4、parse(self, response) : 解析方法,每个初始 URL 下载后都会调用。调用时,每个 URL 返回的 Response 对象作为唯一参数传入。功能如下: 负责解析返回的网页数据(response.body),提取结构化数据(生成item),生成下一页的URL请求。
修复网址,解析
# -*- coding: utf-8 -*-
import scrapy
class ItcastSpider(scrapy.Spider):
name = 'itcast'
allowed_domains = ['itcast.cn']
start_urls = ("http://www.itcast.cn/channel/teacher.shtml",)
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
print(response.body)
终端运行
scrapy crawl itcast
输出:打印整个抓取页面
提取数据
源文件
xxx
xxx
<p>xxx
</p>
以前在 mySpider/items.py 中定义了一个 ItcastItem 类。在这里你可以导入:
# -*- coding: utf-8 -*-
import scrapy
from mySpider.items import MyspiderItem
class ItcastSpider(scrapy.Spider):
name = 'itcast'
allowed_domains = ['itcast.cn']
start_urls = ("http://www.itcast.cn/channel/teacher.shtml",)
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
# 存放老师信息的集合
items = []
for each in response.xpath("//div[@class='li_txt']"):
# 将我们得到的数据封装到一个 `ItcastItem` 对象
item = MyspiderItem()
#extract()方法返回的都是unicode字符串
name = each.xpath("h3/text()").extract()
title = each.xpath("h4/text()").extract()
info = each.xpath("p/text()").extract()
#xpath返回的是包含一个元素的列表
item['name'] = name[0]
item['title'] = title[0]
item['info'] = info[0]
items.append(item)
# 直接返回最后数据
return items
保存数据
# json格式,默认为Unicode编码
scrapy crawl itcast -o teachers.json
# json lines格式,默认为Unicode编码
scrapy crawl itcast -o teachers.jsonl
# csv 逗号表达式,可用Excel打开
scrapy crawl itcast -o teachers.csv
# xml格式
scrapy crawl itcast -o teachers.xml
查看结果