scrapy分页抓取网页(用Python实现一个mySpider文件夹文件夹 )

优采云 发布时间: 2022-01-20 21:21

  scrapy分页抓取网页(用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 = &#39;itcast&#39;

allowed_domains = [&#39;itcast.cn&#39;]

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=&#39;li_txt&#39;]"):

# 将我们得到的数据封装到一个 `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[&#39;name&#39;] = name[0]

item[&#39;title&#39;] = title[0]

item[&#39;info&#39;] = 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

  查看结果

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线