scrapy使用代理报错keyerror: proxy_爬虫Scrapy框架-Crawlspider链接提取器与规则解析器...

Crawlspider

一:Crawlspider简介

    CrawlSpider其实是Spider的一个子类,除了继承到Spider的特性和功能外,还派生除了其自己独有的更加强大的特性和功能。其中最显著的功能就是”LinkExtractors链接提取器“。Spider是所有爬虫的基类,其设计原则只是为了爬取start_url列表中网页,而从爬取到的网页中提取出的url进行继续的爬取工作使用CrawlSpider更合适。

二:CrawlSpider整体的爬取流程:

  a)爬虫文件首先根据其实url,获取该url的网页内容

  b)链接提取器会根据提取规则将步骤a中网页内容中的链接进行提取

  c)规则解析器会根据指定解析规则将链接提取器中提取到的链接中的网页内容根据指定的规则进行解析

  d)将解析数据封装到item中,然后提交给管道进行持久化存储

三:Crawlspider使用

实例:爬取https://www.qiushibaike.com/主页帖子作者以及内容

4695def9c5cf2a6384d26b204f0cd610.png

1.创建scrapy工程

3382c18b08600b8a59c1cc2c0b42940d.png

2.创建爬虫文件

7b62d047c0cab39eaf30be7ecebbecda.png

注意:对比以前的指令多了 "-t crawl",表示创建的爬虫文件是基于CrawlSpider这个类的,而不再是Spider这个基类。

3.生成的目录结构如下:

cf22033377f3a8702c4b7d0b2c44fe6f.png

CrawlDemo.py爬虫文件设置:

  LinkExtractor:顾名思义,链接提取器。
  Rule : 规则解析器。根据链接提取器中提取到的链接,根据指定规则提取解析器链接网页中的内容。

  Rule参数介绍:

    参数1:指定链接提取器

    参数2:指定规则解析器解析数据的规则(回调函数)

    参数3:是否将链接提取器继续作用到链接提取器提取出的链接网页中,当callback为None,参数3的默认值为true。

  rules=( ):指定不同规则解析器。一个Rule对象表示一种提取规则。

# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rulefrom crawlPro.items import CrawlproItem
class CrawldemoSpider(CrawlSpider):name = 'crawlDemo'# allowed_domains = ['www.qiushibaike.com']start_urls = ['http://www.qiushibaike.com/']#rules元祖中存放的是不同规则解析器(封装好了某种解析规则)rules = (# Rule: 规则解析器,可以将连接提取器提取到的所有连接表示的页面进行指定规则(有中间的回调函数决定)的解析#LinkBxtractor:连接提取器,会去上面起始url响应回来的页面中,提取指定的urlRule(LinkExtractor(allow=r'/8hr/page/d+'), callback='parse_item', follow=True), #follow=True可以跟进保证将所有页面都提取出来(实际就是去重功能))def parse_item(self, response):# i = {}# #i['domain_id'] = response.xpath('//input[@id="sid"]/@value').extract()# #i['name'] = response.xpath('//div[@id="name"]').extract()# #i['description'] = response.xpath('//div[@id="description"]').extract()# return idivs=response.xpath('//div[@id="content-left"]/div')for div in divs:item=CrawlproItem()#提取糗百中段子的作者item['author'] = div.xpath('./div[@class="author clearfix"]/a[2]/h2/text()').extract_first().strip('n')# 提取糗百中段子的内容item['content'] = div.xpath('.//div[@class="content"]/span/text()').extract_first().strip('n')yield item  #将item提交到管道

item.py文件设置:

# -*- coding: utf-8 -*-# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.htmlimport scrapyclass CrawlproItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()author=scrapy.Field()content=scrapy.Field()

pipelines.py管道文件设置:

# -*- coding: utf-8 -*-# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.htmlclass CrawlproPipeline(object):def __init__(self):self.fp = Nonedef open_spider(self,spider):print('开始爬虫')self.fp = open('./data.txt','w',encoding='utf-8')def process_item(self, item, spider):# 将爬虫文件提交的item写入文件进行持久化存储self.fp.write(item['author']+':'+item['content']+'n')return itemdef close_spider(self,spider):print('结束爬虫')self.fp.close()

设置代理:

middlewares.py中间件:

设置代理:ip地址可以通过以下几个链接查找

http://ip.seofangfa.com/

settings.py里面设置:

DOWNLOADER_MIDDLEWARES = {'crawlPro.middlewares.Mydaili': 543,  #Mydaili名字就是中间件里面的类名
}

middlewares.py中间件设置:

class Mydaili(object):def process_request(self,request,spider):request.meta['proxy'] = "http://119.28.195.93:8888"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472254.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

activity-启动动画的设定(下面弹出出现,弹入下面消失)

1.今天为了把一个activity以dialog的形式显示,而且实现从开始的时候从底部往上弹出,结束的时候,从上往下消失,做了如下的工作。 1)如果把一个activity以dialog的形式显示? 这个只需要设置theme的样式为*.di…

传智书城首页设计代码_(自适应手机版)响应式创意餐饮酒店装饰设计类网站织梦模板 html5蓝色餐饮酒店设计网站源码下载...

模板名称:(自适应手机版)响应式创意餐饮酒店装饰设计类网站织梦模板 html5蓝色餐饮酒店设计网站源码下载本套织梦模板采用织梦最新内核开发的模板,这款模板使用范围广,不仅仅局限于一类型的企业,创意设计、装饰设计、餐饮酒店设计…

【机器学习】逻辑回归—良/恶性乳腺癌肿瘤预测

逻辑回归—良/恶性乳腺癌肿瘤预测 逻辑回归的损失函数、优化 与线性回归原理相同,但由于是分类问题,损失函数不一样,只能通过梯度下降求解 sklearn逻辑回归API sklearn.linear_model.LogisticRegressionLogisticRegression sklearn.linear…

mysql分组之后统计数量

select count(*) from(SELECT count(*) FROM 表名 WHERE 条件 GROUP BY id ) a ; 转载于:https://www.cnblogs.com/shenming/p/4343895.html

opencv mat初始化_【OpenCV入门之十二】看起来一样的图像竟然存在这么大的差别!...

小白导读学习计算机视觉最重要的能力应该就是编程了,为了帮助小伙伴尽快入门计算机视觉,小白准备了【OpenCV入门】系列。新的一年文章的内容进行了很大的完善,主要是借鉴了更多大神的文章,希望让小伙伴更加容易理解。如果小伙伴觉…

LeetCode 1854. 人口最多的年份(差分)

文章目录1. 题目2. 解题1. 题目 给你一个二维整数数组 logs ,其中每个 logs[i] [birthi, deathi] 表示第 i 个人的出生和死亡年份。 年份 x 的 人口 定义为这一年期间活着的人的数目。 第 i 个人被计入年份 x 的人口需要满足:x 在闭区间 [birthi, dea…

hdu 4280 最大流sap

模板套起来 1   5 7  //5个结点&#xff0c;7个边 3 3  //坐标 3 0   3 1 0 0 4 5 1 3 3  //相连的结点和流 2 3 4 2 4 3 1 5 6 4 5 3 1 4 4 3 4 29 1 #include<cstdio>2 #include<algorithm>3 #include<cstring>4 using namespace std;5 const in…

Opencv visual studio c++ 环境搭建

转载&#xff1a; https://blog.csdn.net/smilife_/article/details/89244189 https://blog.csdn.net/cwj066/article/details/82252764 c 环境搭建 下载链接opencv-3.4.5-vc14_vc15.exe 第一步&#xff1a;去opencv官网(https://opencv.org/)下载opencv源码https://opencv.…

服务端_说说Netty服务端启动流程

点击上方☝SpringForAll社区 轻松关注&#xff01;及时获取有趣有料的技术文章本文来源&#xff1a;http://yeming.me/2016/03/12/netty1/netty服务端代码分析服务端启动配置对于 ServerBootstrap&#xff1a;ServerBootstrap继承于 AbstractBootstrap&#xff0c;它从父类继承…

python能做哪些客户端_发布一个Httpsqs的Python客户端

这款软件有几种客户端, Java/Perl/C,却没有Python的客户端.故,本人奉上一个实现,欢迎指正!!代码:#Verion 1.0#Author wendal(wendal1985gmail.com)#If you find a bug, pls mail meimport sys,httplibERROR HTTPSQS_ERRORGET_END HTTPSQS_GET_ENDPUT_OK HTTPSQS_PUT_OKPUT_E…

ztree在刷新时第一个父节点消失_第一个关于中式菜谱的智能问答机器人小程序正式上线啦...

为了满足大家对菜品烹饪的各类问题能直接得到答案的需求&#xff0c;我开发了目前第一个真正关于菜谱的智能问答系统&#xff0c;并在微信小程序发布上线。这套系统支持对于8600多种菜品的问答功能&#xff0c;并能实现快速问答响应&#xff0c;整套系统后端依托于搭建的中式菜…

LeetCode 1855. 下标对中的最大距离(双指针)

文章目录1. 题目2. 解题1. 题目 给你两个 非递增 的整数数组 nums1​​​​​​ 和 nums2​​​​​​ &#xff0c;数组下标均 从 0 开始 计数。 下标对 (i, j) 中 0 < i < nums1.length 且 0 < j < nums2.length 。如果该下标对同时满足 i < j 且 nums1[i] …

【Python基础知识-pycharm版】第一节-基础

python第一节特点Python 解释器python开发环境交互模式IDLE开发环境使用入门程序基本格式图形化程序设计python程序的构成python程序的对象python的引用python的标识符标识符命名规则变量和简单赋值语句删除变量和垃圾回收机制Python 是一种解释型、面向对象的语言。 官网&…

解决Eclipse 项目报错:Unbound classpath container

Eclipse出现下面两条报错&#xff1a;The project cannot be built until build path errors are resolved HelloWord Unknown Java ProblemUnbound classpath container: JRE System Library [JavaSE-1.7] in project java project name java project name Build path Build P…

c++对象回收string类型成员时coredump_本体技术视点 | 虚拟机中引用性动态语言对象模型思考...

1引言Ontology 的 NeoVM 虚拟机新增加了 DCALL、HAS_KEY、KEYS 以及 VALUES 等几条新的指令。因此&#xff0c;基于 NeoVM 的引用性动态语言对象的设计理论上可行&#xff0c;这可使得当前语言的支持能更接近原生语义。对象模型设计的必要性Ontology NeoVM 对用户暴露的对象语义…

LeetCode 1856. 子数组最小乘积的最大值(前缀和 + 单调栈)

文章目录1. 题目2. 解题1. 题目 一个数组的 最小乘积 定义为这个数组中 最小值 乘以 数组的 和 。 比方说&#xff0c;数组 [3,2,5] &#xff08;最小值是 2&#xff09;的最小乘积为 2 * (325) 2 * 10 20 。 给你一个正整数数组 nums &#xff0c;请你返回 nums 任意 非空…

【Python基础知识-pycharm版】第二节-赋值/数据类型/时间点/运算符/字符串

python第二节链式赋值_系列解包赋值内置数据类型时间表示unix时间点多点坐标绘出折线图运算符字符串部分来源&#xff1a;1.https://blog.csdn.net/wys103158/article/details/964882382.https://www.cnblogs.com/jack-zh/p/10810569.html3.http://c.biancheng.net/view/4258.h…

python第k序元素查找列表_【Python】第8次练习:列表——程序填空题 -合并队列、列表元素零的移动、列表逆序输出、第K序元素查找...

【Python】第8次练习&#xff1a;列表——程序填空题 -合并队列、列表元素"零"的移动、列表逆序输出、第K序元素查找1、程序填空题 -合并队列题目&#xff1a;某班男女两队同学各若干人&#xff0c;男生已按身高由低到高存放在列表中&#xff0c;女生身高需输入到一个…

大数据应用项目创新大赛_全国高校大数据应用创新大赛

2015年国务院发布《促进大数据发展行动纲要》&#xff0c;标志着大数据战略正式上升为国家战略。为配合国家大数据战略&#xff0c;加快产业人才培养&#xff0c;教育部增设了“数据科学与大数据技术”本科专业和“大数据技术与应用”高职专业&#xff0c;并得到各高校的积极响…