02.Scrapy-Demo
Scrapy入门实战
采集目标:采集西祠网的IP代理 包括 IP PORT
1. 新建项目
scrapy startproject xicidailiSpider
# scrapy 新建项目 项目名
2. 创建爬虫
scrapy genspider xicidaili xicidaili.com
# scrapy 产生爬虫 爬虫名字 网站域名
# 注意:爬虫名字一定不能与项目名字一致!


可以看到,在项目的spiders下得到了一个爬虫文件
解释爬虫文件
import scrapy # 导入scrapy
# 创建爬虫类 并且继承自scrapy.Spider --> 爬虫最基础的类
# 另外几个类都是继承自这个类
class XicidailiSpider(scrapy.Spider):
#爬虫名字 --> 必须唯一
name = 'xicidaili'
# 允许采集的域名
allowed_domains = ['xicidaili.com']
# 开始采集的网站
start_urls = ['http://xicidaili.com/']
# 解析响应数据 提取数据 或者网址等 response就是网页源码
def parse(self, response):
pass
3. 分析网址
提取数据
- 正则表达式(基础 必回 难掌握)
- XPath --> 从HTML中国提取数据语法
- CSS --> 从HTML中国提取数据语法
response.xpath("xpath语法").get()
get() 是得到一个元素
getall() 是多个元素
class XicidailiSpider(scrapy.Spider):
name = 'xicidaili'
allowed_domains = ['xicidaili.com']
start_urls = ['https://www.xicidaili.com/nn/']
# start_urls = [f'https://www.xicidaili.com/nn/{page}' for page in range(1,3685)] def parse(self, response):
# 提取数据
# response.xpath("//tr/td[2]/text()")
selectors = response.xpath("//tr")
for selector in selectors:
ip = selector.xpath("./td[2]/text()").get() # . 在当前节点下继续选择
port = selector.xpath("./td[3]/text()").get() # ip = selector.xpath("./td[2]/text()").extract_first() # 与get等价
# port = selector.xpath("./td[3]/text()").extract_first()
print(ip,port)
4. 运行爬虫
scrapy crawl 爬虫名字
# 翻页操作
next_page = response.xpath('//a[@class="next_page"]/@href').get()
if next_page:
print(next_page)
# 拼接网址
next_url = response.urljoin(next_page)
yield scrapy.Request(next_url,callback=self.parse) # yield 生成器
# Request() 发送请求 类似requests.get()
# callback 是回调函数 将发出去的请求得到的响应还交给自己(self.parse)处理
# 注意:回调函数不要写() 只写方法名字
02.Scrapy-Demo的更多相关文章
- c#&.NET3.0高级程序设计-02 Enum Demo
Enum 实例 using System; using System.Collections.Generic; public class MyClass { enum EmpType ...
- scrapy爬取58同城二手房问题与对策
测试环境: win10,单机爬取,scrapy1.5.0,python3.6.4,mongodb,Robo 3T 其他准备: 代理池:测试环境就没有用搭建的flask抓代理,因为我找到的几个免费网站有 ...
- 爬虫——scrapy框架
Scrapy是一个异步处理框架,是纯Python实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可拓展性强,可以灵活完成各种需求.我们只需要定制几个模块就可以轻松实现一个爬虫. 1.架构 Scra ...
- 05 爬虫之scrapy
一 scrapy框架简介 01 什么是scrapy: Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队 ...
- py库: scrapy (深坑未填)
scrapy 一个快速高级的屏幕爬取及网页采集框架 http://scrapy.org/ 官网 https://docs.scrapy.org/en/latest/ Scrapy1.4文档 http: ...
- 萌新学习Python爬取B站弹幕+R语言分词demo说明
代码地址如下:http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这样 ...
- Scrapy 概览笔记
本项目代码可参考 imzhizi/myspider: a scrapy demo with elasticsearch 虚拟环境的创建 建议爬虫项目都创建虚拟环境 虚拟环境在 Python 项目中真的 ...
- Python Scrapy 实战
Python Scrapy 什么是爬虫? 网络爬虫(英语:web crawler),也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器人.其目的一般为编纂网络索引. Python 爬虫 ...
- Scrapy--1安装和运行
1.Scrapy安装问题 一开始是按照官方文档上直接用pip安装的,创建项目的时候并没有报错, 然而在运行 scrapy crawl dmoz 的时候错误百粗/(ㄒoㄒ)/~~比如: ImportEr ...
- python3高级编程
1. SMTP发送邮件 internet相关协议: http:网页访问相关,httplib,urllib,xmlrpclib ftp:文件传输相关, ftplib, urllib nntp:新闻和帖子 ...
随机推荐
- 【MetaPruning】2019-ICCV-MetaPruning Meta Learning for Automatic Neural Network Channel Pruning-论文阅读
MetaPruning 2019-ICCV-MetaPruning Meta Learning for Automatic Neural Network Channel Pruning Zechun ...
- Chisel3 - 运算符和位宽推断
https://mp.weixin.qq.com/s/rI-CJM6GyI6EUHPZ3uYiFg 如同Verilog中的众多运算符,Chisel也针对自身的数据类型,提供了很多运算符. Ch ...
- Html超链接和表单
超链接 a href="链接地址" target="链接打开方式" title="当鼠标放在连接上显示的文字"></a>链 ...
- Java实现 LeetCode 122 买卖股票的最佳时机 II
122. 买卖股票的最佳时机 II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意: ...
- Java实现 洛谷 P2089 烤鸡
import java.util.Arrays; import java.util.Iterator; import java.util.LinkedList; import java.util.Sc ...
- Java实现 串中取3个不重复字母
从标准输入读入一个由字母构成的串(不大于30个字符). 从该串中取出3个不重复的字符,求所有的取法. 取出的字符,要求按字母升序排列成一个串. 不同的取法输出顺序可以不考虑. 例如: 输入: abc ...
- java实现第七届蓝桥杯压缩变换
压缩变换 压缩变换 小明最近在研究压缩算法. 他知道,压缩的时候如果能够使得数值很小,就能通过熵编码得到较高的压缩比. 然而,要使数值很小是一个挑战. 最近,小明需要压缩一些正整数的序列,这些序列的特 ...
- 性能测试之 JVM 概念认识
无论什么语言,在程序运行过程中,都需要对内存进行管理,要知道计算机/服务器的内存不是无限的.例如:C语言中需要对对象的内存负责,需要用delete/free来释放对象:那JAVA中,对象的内存管理是由 ...
- Java基础(十一)
一.连接到服务器 telnet是一种用于网络编程的非常强大的测试工具,你可以在命令shell中输入telnet来启动它. 二.实现服务器 服务器循环体: 1.通过输入数据流从客户端接收一个命令. 2. ...
- 温故知新-java虚拟机
文章目录 java虚拟机是什么? jvm的体系结构 第一个类加载子系统 类的生命周期 加载器分类 类加载机制 第二个运行时数据区(内存结构) GC算法和收集器 如何判断对象可以被回收? 如何判断一个常 ...