目录

  • 架构介绍
  • 安装创建和启动
  • 配置文件目录介绍
  • 爬取数据,并解析
  • 数据持久化
    • 保存到文件
    • 保存到redis
  • 动作链,控制滑动的验证码

架构介绍

Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据。但目前Scrapy的用途十分广泛,可用于如数据挖掘、监测和自动化测试等领域,也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。

​ Scrapy 是基于twisted框架开发而来,twisted是一个流行的事件驱动的python网络框架。因此Scrapy使用了一种非阻塞(又名异步)的代码来实现并发。整体架构大致如下

IO多路复用

# 引擎(EGINE)(大总管)
引擎负责控制系统所有组件之间的数据流,并在某些动作发生时触发事件。有关详细信息,请参见上面的数据流部分。
# 调度器(SCHEDULER)
用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL的优先级队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
# 下载器(DOWLOADER)
用于下载网页内容, 并将网页内容返回给EGINE,下载器是建立在twisted这个高效的异步模型上的
# 爬虫(SPIDERS)
SPIDERS是开发人员自定义的类,用来解析responses,并且提取items,或者发送新的请求
# 项目管道(ITEM PIPLINES)
在items被提取后负责处理它们,主要包括清理、验证、持久化(比如存到数据库)等操作# 两个中间件
-爬虫中间件
-下载中间件(用的最多,加头,加代理,加cookie,集成selenium)

安装创建和启动

# 1 框架 不是 模块
# 2 号称爬虫界的django(你会发现,跟django很多地方一样)
# 3 安装-mac,linux平台:pip3 install scrapy-windows平台:pip3 install scrapy(大部分人可以)- 如果失败:1、pip3 install wheel #安装后,便支持通过wheel文件安装软件,wheel文件官网:https://www.lfd.uci.edu/~gohlke/pythonlibs3、pip3 install lxml4、pip3 install pyopenssl5、下载并安装pywin32:https://sourceforge.net/projects/pywin32/files/pywin32/6、下载twisted的wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted7、执行pip3 install 下载目录\Twisted-17.9.0-cp36-cp36m-win_amd64.whl8、pip3 install scrapy# 4 在script文件夹下会有scrapy.exe可执行文件-创建scrapy项目:scrapy startproject 项目名   (django创建项目)-创建爬虫:scrapy genspider 爬虫名 要爬取的网站地址   # 可以创建多个爬虫# 5 命令启动爬虫-scrapy crawl 爬虫名字-scrapy crawl 爬虫名字 --nolog   # 没有日志输出启动# 6 文件执行爬虫(推荐使用)-在项目路径下创建一个main.py,右键执行即可from scrapy.cmdline import execute# execute(['scrapy','crawl','chouti','--nolog'])  # 没有设置日志级别execute(['scrapy','crawl','chouti'])              # 设置了日志级别

配置文件目录介绍

-crawl_chouti   # 项目名-crawl_chouti # 跟项目一个名,文件夹-spiders    # spiders:放着爬虫  genspider生成的爬虫,都放在这下面-__init__.py-chouti.py # 抽屉爬虫-cnblogs.py # cnblogs 爬虫-items.py     # 对比django中的models.py文件 ,写一个个的模型类-middlewares.py  # 中间件(爬虫中间件,下载中间件),中间件写在这-pipelines.py   # 写持久化的地方(持久化到文件,mysql,redis,mongodb)-settings.py    # 配置文件-scrapy.cfg       # 不用关注,上线相关的# 配置文件settings.py
ROBOTSTXT_OBEY = False   # 是否遵循爬虫协议,强行运行
USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'    # 请求头中的ua,去浏览器复制,或者用ua池拿
LOG_LEVEL='ERROR' # 这样配置,程序错误信息才会打印,#启动爬虫直接 scrapy crawl 爬虫名   就没有日志输出# scrapy crawl 爬虫名 --nolog  # 配置了就不需要这样启动了# 爬虫文件
class ChoutiSpider(scrapy.Spider):name = 'chouti'   # 爬虫名字allowed_domains = ['https://dig.chouti.com/']  # 允许爬取的域,想要多爬就注释掉start_urls = ['https://dig.chouti.com/']   # 起始爬取的位置,爬虫一启动,会先向它发请求def parse(self, response):  # 解析,请求回来,自动执行parser,在这个方法中做解析print('---------------------------',response)

爬取数据,并解析

# 1 解析,可以使用bs4解析
from bs4 import BeautifulSoup
soup=BeautifulSoup(response.text,'lxml')
soup.find_all()  # bs4解析
soup.select()  # css解析# 2 内置的解析器
response.css
response.xpath# 内置解析 # 所有用css或者xpath选择出来的都放在列表中# 取第一个:extract_first()# 取出所有extract()
# css选择器取文本和属性:# .link-title::text  # 取文本,数据都在data中# .link-title::attr(href)   # 取属性,数据都在data中
# xpath选择器取文本和属性# .//a[contains(@class,"link-title")/text()]#.//a[contains(@class,"link-title")/@href]# 内置css选择期,取所有
div_list = response.css('.link-con .link-item')
for div in div_list:content = div.css('.link-title').extract()print(content)

数据持久化

# 方式一(不推荐)-1 parser解析函数,return 列表,列表套字典# 命令   (支持:('json', 'jsonlines', 'jl', 'csv', 'xml', 'marshal', 'pickle')# 数据到aa.json文件中-2 scrapy crawl chouti -o aa.json
# 代码:
lis = []
for div in div_list:content = div.select('.link-title')[0].textlis.append({'title':content})return lis# 方式二 pipline的方式(管道)-1 在items.py中创建模型类-2 在爬虫中chouti.py,引入,把解析的数据放到item对象中(要用中括号)-3 yield item对象-4 配置文件配置管道ITEM_PIPELINES = {# 数字表示优先级(数字越小,优先级越大)'crawl_chouti.pipelines.CrawlChoutiPipeline': 300,'crawl_chouti.pipelines.CrawlChoutiRedisPipeline': 301,}-5 pipline.py中写持久化的类spider_open  # 方法,一开始就打开文件process_item # 方法,写入文件spider_close # 方法,关闭文件

保存到文件

# choutiaa.py 爬虫文件
import scrapy
from chouti.items import ChoutiItem  # 导入模型类
class ChoutiaaSpider(scrapy.Spider):name = 'choutiaa'# allowed_domains = ['https://dig.chouti.com/']   # 允许爬取的域start_urls = ['https://dig.chouti.com//']   # 起始爬取位置# 解析,请求回来,自动执行parse,在这个方法中解析def parse(self, response):print('----------------',response)from bs4 import BeautifulSoupsoup = BeautifulSoup(response.text,'lxml')div_list = soup.select('.link-con .link-item')for div in div_list:content = div.select('.link-title')[0].texthref = div.select('.link-title')[0].attrs['href']item = ChoutiItem()  # 生成模型对象item['content'] = content  # 添加值item['href'] = hrefyield item  # 必须用yield     # items.py 模型类文件
import scrapy
class ChoutiItem(scrapy.Item):content = scrapy.Field()href = scrapy.Field()# pipelines.py 数据持久化文件
class ChoutiPipeline(object):def open_spider(self, spider):# 一开始就打开文件self.f = open('a.txt', 'w', encoding='utf-8')def process_item(self, item, spider):# print(item)# 写入文件的操作

Python解决滑块验证,Scarpy框架采集数据到redis数据库!相关推荐

  1. python爬虫滑块验证怎么解决

    对于 Python 爬虫中遇到的滑块验证,你可以考虑以下几种方法来解决: 手动解决滑块验证:在爬虫程序中手动解决滑块验证,比如通过手动模拟鼠标滑动操作来完成滑块验证. 使用浏览器插件解决滑块验证:你可 ...

  2. 完美解决Python解决字符串转16进制数据

    Python解决字符串转16进制数据 废话不多说,直接上代码 首先解决字符串转16进制函数,代码如下: def str2hex(s):odata = 0;su =s.upper()for c in s ...

  3. 【随记】Python:前端表格获取到的填写数据插入到数据库表格中数据类型问题

    Python:前端表格获取到的填写数据插入到数据库表格中数据类型问题 背景 问题再现 结论 背景 用户在前端界面的表格中填写数据,通过 text() 获取到的数据插入到数据库表中,该过程涉及到了数据类 ...

  4. 将oracle数据库中的数据导入redis数据库演示

    1.首先我们先创建一个sql文件,文件名为 aa.sql ,sql语句如下所示.第一个spool后面跟着的 /opt/dt.txt ,表示将oracle执行后生成的可用于redis读取的语句存放在此文 ...

  5. python五行代码解决滑块验证的缺口距离识别,破解滑块验证...

    目前网上关于滑块的缺口识别的方法很多,但是都不极简,看起来繁杂,各种算法的都有,有遍历的有二分法的,今天写个最简单,准确率最高的. 直接看代码: def FindPic(target, templat ...

  6. python五行代码解决滑块验证的缺口距离识别,破解滑块验证

    目前网上关于滑块的缺口识别的方法很多,但是都不极简,看起来繁杂,各种算法的都有,有遍历的有二分法的,今天写个最简单,准确率最高的. 直接看代码: def FindPic(target, templat ...

  7. 淘宝商品详情api接口(解决滑块支持高并发采集)

    采集淘宝商品列表和商品详情遇到滑块验证码的解决方法(带SKU和商品描述,可高并发),主要是解决了高频情况下的阿里系滑块和必须要N多小号才能解决的反扒问题,以后都可以使用本方法: 大家都知道,淘宝的反爬 ...

  8. python实现滑块验证功能_python3.8.1+selenium实现登录滑块验证功能

    python3.8.1+selenium解决登录滑块验证的问题,先给大家分享一个效果图,感觉不错,可以参考实现代码. 这里的滑块是qq邮箱的截图,如图所示,可以作为同类滑块验证的参考. "& ...

  9. 使用selenium解决滑块验证的问题

    使用自动化测试时有些网站会使用滑块来阻止,所以如何解决滑块问题已经成为自动化测试不可或缺的,今天以网易易盾网站的滑块举例:https://dun.163.com/trial/sense 要解决滑块问题 ...

最新文章

  1. 天体运行轨迹_海王星轨道外发现139个新天体, 能揭开太阳系第九颗行星奥秘?...
  2. 下载安装tomcat6.0
  3. 条件随机场(Conditional random fields,CRFs)文献阅读指南
  4. 鸟哥的Linux私房菜(基础篇)- 第十八章、认识系统服务 (daemons)
  5. 2793 [Poi2012]Vouchers
  6. JDBC——基于Mysql的基本操作
  7. [Everyday Mathematics]20150103
  8. 关于用Restful API下载网易云笔记时遇到的图片外链不能打开的问题
  9. Oracle12c:安装后新建用户及其默认表空间,并创建表测试
  10. [Java基础]线程安全的类
  11. UIView的Touch事件UIControlEvents详解
  12. logrus 输出多个文件_Logrus源码阅读(1)基本用法
  13. linux--私钥登陆
  14. iOS开发--XMPPFramework--用户登录(三)
  15. Kerio Network Monitor
  16. Excel去掉下划线首字母小写的公式
  17. excel怎么从身份证中提取性别?
  18. 求两点之间的最短路径
  19. 什么是强化学习呢,来涨波知识
  20. 曾国藩《挺经》卷十七藏锋

热门文章

  1. django-模态框添加学生
  2. django-添加学生的制作-模块的封装
  3. jquey-jsonp-跨域请求数据
  4. 基于angular5+ionic3仿照网易云音乐客户端
  5. Gym 100553J Jokewithpermutation(dfs)
  6. (桌面虚拟化最佳实践--呼叫中心系统优化之二)存储和服务器优化项目
  7. 使用Qt Creator 2.60编写C/C++程序
  8. Linux系统双机热备的方案
  9. Spring MVC @RequestMapping Annotation示例
  10. (草稿)如何判断一名UiPath开发人员是否合格?