本文以爬取网站 代码的边城 为例

1.安装scrapy框架

详细教程可以查看本站文章 点击跳转

2.新建scrapy项目

生成一个爬虫文件。在指定的目录打开cmd.exe文件,输入代码

scrapy startproject mxp7
cd mxp7
scrapy genspider sp mxp7.com

然后通过Pycharm打开我们新建的项目,可以发现所有文件都已经新建好了,我们只需要在文件里修改好代码,就可以在命令行中输入命令爬取数据了。

3.提取数据

先点击开一个网页,查看博客的基本框架,然后我们在sp.py,我们的爬虫文件里面新建item字典,通过xpath提取出博客的各项内容。

注:在这里强调一个与xpath有关的坑。笔者起初获取网页标签内容时,喜欢在浏览器调试目录下复制xpath

比如像上图一样复制title的xpath,获得的xpath内容如下,他会按照标签的顺序提取xpath

/html/body/div[2]/div[1]/section[1]/main/article/header/h1

然而这种情况只针对于静态网页,因为动态网页中某些信息是通过代码动态加载出来的,我们复制的xpath就是动态加载后的目录,但在爬取数据的时,爬虫是不会加载动态界面的,它只爬取response内容下的原始代码。如果想让爬虫通过标签顺序获取网页内容,那必须对照着response下的代码,一般来说计算起来相当麻烦。

如何打开网页的Response

打开目标网页,点击F12进入浏览器调试,选择Network后,按F5刷新,界面下方就会出现该网页调用的文件,选择当前网址的同名文件,再在右边点击顶部菜单"Response",我们就可以查看response的内容了

话说回来,在浏览器调试界面我们还可以通过检索id获取xpath

获取内容如下:

//\*\[@id="post-331"\]/header/h1

然而,我们会发现id与网站分页的编号相同,这意味着每张网页此目录下的标签,它的id都是不同的,所以就不能通过id抽象出所有网页的xpath,因此笔者在这里更推荐大家通过css的xpath提取路径。我们写好xpath内容之后,获得的sp.py的源代码如下所示:

import scrapy

class SpSpider(scrapy.Spider):
name = 'sp'
allowed_domains = ['mxp7.com']
start_urls = ['http://mxp7.com'] def parse(self, response):
href = response.xpath("//h2[@class = 'entry-title'][1]//a/@href").extract_first()
print(href)
yield scrapy.Request(href, callback=self.parse1) def parse1(self, response):
item = {}
item["date"] = response.xpath("//span[@class ='meta-date']//time/text()").extract_first()
item["category"] = response.xpath("//span[@class = 'meta-category']//a/text()").extract_first()
item["title"] = response.xpath("//h1[@class = 'entry-title']/text()").extract_first()
item["author"] = response.xpath("//span[@class = 'meta-author']//a/text()").extract_first()
contain_path = response.xpath("//div[@class = 'entry-content clearfix']")
item["contain"] = contain_path.xpath("string(.)").extract_first()
yield item

在这里我们就把数据抛给了pipelines,然后我们就可以在pipelines里面处理数据,笔者选择在这里将传送过来的数据输出到命令行

# pipelines.py源码
class Mxp7Pipeline:
def process_item(self, item, spider):
return item

pipelines数据处理完毕后,我们还需要在setting.py里面打开pipelines

找到这段代码将其取消注释,这段代码调用了我们pipelines里面的函数,后面的300指的是该函数的权重,这个权重会在并行pipelines里面决定数据处理的优先级。

将这里处理完毕后,我们在 D:\Project\Spider\mxp7>路径下可以进行我们的抓取了,输入命令行

然后会发现我们抓取的数据藏在了一大堆日志文件里面,为了视觉上的感受,我们可以在setting.py里面添加一段代码,使得输出日志的等级为ERROR

然后重新在cmd里输入抓取命令

我们就可以成功抓取该页面的内容了

如果我们要获取博客上发布的所有内容,那我们就还需要对sp.py进行修改,在parse函数里面添加获取下一页的代码,可以先在浏览器上打开该网页,查看下一页网页的格式,可以发现下一页已经是完整格式的链接了

那么我们直接在抛出的scrapy.Request参数里面使用我们获取的网页即可

pre\_url = response.xpath("//div\[@class = 'nav-previous'\]//a/@href").extract\_first()
if pre\_url:
yield scrapy.Request(pre\_url, callback=self.parse1)//调用自身

但在某些网站获得的网址并不是一个完整的网址(笔者的网站的反爬机制相当的弱)

就需要在提取的网址前在加入该网页的头部地址,这里相信各位自己可以操作,暂不赘述。修改完后我们还需要在setting.py里修改USER_AGENT的值,在修改之前还需要获取网页的USER_AGENT的值。

注:USER_AGENT是爬虫与网站反爬虫机制交锋的地方,双方会针对这一部分做出千变万化的措施来相互对抗。笔者此步骤只适用于最简单的反爬虫机制。实际上笔者的网站目前并没有任何的反爬虫机制,即使是不进行这一步,我们也可以正常地爬取完所有的文章内容。

打开Network界面后,在右下方点击顶部菜单"Headers",滑到底部就可以获取user-agent的值了

然后我们在setting找到被注释的USER_AGENT代码,将它的值修改为此处复制的值

USER\_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36'

处理完毕后我们可以重新在cmd界面抓取数据

成功抓取网站所有文章的内容

4.保存文件

如果想保存文件,那只需要在命令行里输入如下代码:

scrapy crawl sp -o mxp7.csv

在当前目录会新建一个mxp7.csv文件

打开发现是乱码,我们可以通过记事本打开,另存为此格式

重新打开后就可以获得正常的文件了

基于scrapy框架的爬虫基本步骤的更多相关文章

  1. 基于scrapy框架的爬虫

    Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. scrapy 框架 高性能的网络请求 高性能的数据解析 高性能的 ...

  2. 基于Scrapy框架的Python新闻爬虫

    概述 该项目是基于Scrapy框架的Python新闻爬虫,能够爬取网易,搜狐,凤凰和澎湃网站上的新闻,将标题,内容,评论,时间等内容整理并保存到本地 详细 代码下载:http://www.demoda ...

  3. 基于scrapy框架输入关键字爬取有关贴吧帖子

    基于scrapy框架输入关键字爬取有关贴吧帖子 站点分析 首先进入一个贴吧,要想达到输入关键词爬取爬取指定贴吧,必然需要利用搜索引擎 点进看到有四种搜索方式,分别试一次,观察url变化 我们得知: 搜 ...

  4. 基于scrapy框架的分布式爬虫

    分布式 概念:可以使用多台电脑组件一个分布式机群,让其执行同一组程序,对同一组网络资源进行联合爬取. 原生的scrapy是无法实现分布式 调度器无法被共享 管道无法被共享 基于 scrapy+redi ...

  5. Scrapy 框架,爬虫文件相关

    Spiders 介绍 由一系列定义了一个网址或一组网址类如何被爬取的类组成 具体包括如何执行爬取任务并且如何从页面中提取结构化的数据. 简单来说就是帮助你爬取数据的地方 内部行为 #1.生成初始的Re ...

  6. 09 Scrapy框架在爬虫中的使用

    一.简介 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架.它集成高性能异步下载,队列,分布式,解析,持久化等. Scrapy 是基于twisted框架开发而来,twisted是一个 ...

  7. 利用scrapy框架进行爬虫

    今天一个网友问爬虫知识,自己把许多小细节都忘了,很惭愧,所以这里写一下大概的步骤,主要是自己巩固一下知识,顺便复习一下.(scrapy框架有一个好处,就是可以爬取https的内容) [爬取的是杨子晚报 ...

  8. 群辉6.1.7安装scrapy框架执行爬虫

    只针对会linux命令,会python的伙伴, 使用环境为: 群辉ds3615xs 6.1.7 python3.5 最近使用scrapy开发了一个小爬虫,因为很穷没有服务器可已部署. 所以打起了我那台 ...

  9. 一个scrapy框架的爬虫(爬取京东图书)

    我们的这个爬虫设计来爬取京东图书(jd.com). scrapy框架相信大家比较了解了.里面有很多复杂的机制,超出本文的范围. 1.爬虫spider tips: 1.xpath的语法比较坑,但是你可以 ...

随机推荐

  1. puppeteer render local HTML template bug

    puppeteer render local HTML template bug ➜ url-to-poster git:(master) ✗ dev ^-v-^ app is running in ...

  2. Flutetr flutter_downloader 1.3.1

    flutter_downloader 此库更新极慢,所以问题及多,可以看文档 安装 dependencies: flutter_downloader: ^1.3.1 配置 Java: // MyApp ...

  3. BTC暴涨市值仅次于亚马逊,NGK推出新人助力空投,直接免费送VAST!

    数据显示,在谷歌搜索中,关键词"BTC"的全球搜索指数在过去一周达到满值100点.特斯拉"加持"下,比特币重启暴涨模式,最高报价48126美金单价,非小号数据显 ...

  4. 「NGK每日快讯」11.28日NGK公链第25期官方快讯!

  5. JavaScriptBOM操作

    BOM(浏览器对象模型)主要用于管理浏览器窗口,它提供了大量独立的.可以与浏览器窗口进行互动的功能,这些功能与任何网页内容无关.浏览器窗口的window对象是BOM的顶层对象,其他对象都是该对象的子对 ...

  6. git相关问题

    1.git查看远程分支更新到本地 git clone 项目地址,示例如下: git clone https://github.com/zhongyushi-git/vue-test.git 在拉取时, ...

  7. SpringBoot文件上传与POI的使用

    1.使用springboot上传文件 本文所要源码在一个项目中,源码:https://github.com/zhongyushi-git/springboot-upload-download.git. ...

  8. Linux-两种磁盘分区方式

    Linux文件设备 要理解Linux,首先要理解Linux文件结构 在Linux操作系统中,几乎所有的设备都位于/dev目录中 名称 作用 位置 SATA接口 电脑硬盘接口 /dev/sd[a-p] ...

  9. java 阿里云短信发送

    记录自己的足迹,学习的路很长,一直在走着呢~ 第一步登录阿里云的控制台,找到此处: 点击之后就到此页面,如果发现账号有异常或者泄露什么,可以禁用或者删除  AccessKey: 此处方便测试,所以就新 ...

  10. 死磕Spring之IoC篇 - BeanDefinition 的解析过程(面向注解)

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...