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的更多相关文章

  1. c#&.NET3.0高级程序设计-02 Enum Demo

    Enum 实例 using System; using System.Collections.Generic;   public class MyClass {     enum EmpType    ...

  2. scrapy爬取58同城二手房问题与对策

    测试环境: win10,单机爬取,scrapy1.5.0,python3.6.4,mongodb,Robo 3T 其他准备: 代理池:测试环境就没有用搭建的flask抓代理,因为我找到的几个免费网站有 ...

  3. 爬虫——scrapy框架

    Scrapy是一个异步处理框架,是纯Python实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可拓展性强,可以灵活完成各种需求.我们只需要定制几个模块就可以轻松实现一个爬虫. 1.架构  Scra ...

  4. 05 爬虫之scrapy

    一 scrapy框架简介 01 什么是scrapy: Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队 ...

  5. py库: scrapy (深坑未填)

    scrapy 一个快速高级的屏幕爬取及网页采集框架 http://scrapy.org/ 官网 https://docs.scrapy.org/en/latest/ Scrapy1.4文档 http: ...

  6. 萌新学习Python爬取B站弹幕+R语言分词demo说明

    代码地址如下:http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这样 ...

  7. Scrapy 概览笔记

    本项目代码可参考 imzhizi/myspider: a scrapy demo with elasticsearch 虚拟环境的创建 建议爬虫项目都创建虚拟环境 虚拟环境在 Python 项目中真的 ...

  8. Python Scrapy 实战

    Python Scrapy 什么是爬虫? 网络爬虫(英语:web crawler),也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器人.其目的一般为编纂网络索引. Python 爬虫 ...

  9. Scrapy--1安装和运行

    1.Scrapy安装问题 一开始是按照官方文档上直接用pip安装的,创建项目的时候并没有报错, 然而在运行 scrapy crawl dmoz 的时候错误百粗/(ㄒoㄒ)/~~比如: ImportEr ...

  10. python3高级编程

    1. SMTP发送邮件 internet相关协议: http:网页访问相关,httplib,urllib,xmlrpclib ftp:文件传输相关, ftplib, urllib nntp:新闻和帖子 ...

随机推荐

  1. cors跨越深度刨析

    解决跨域的方式JSOP,和CORS JSONP不做介绍了. CORS跨域: 参考阮一峰http://www.ruanyifeng.com/blog/2016/04/cors.html 官方:https ...

  2. Matlab矩阵学习二 矩阵的修改

    Matlab矩阵的修改 一.元素修改 (1).矩阵扩充   (2)矩阵删除某行或某列 删除某行:A(m,:)=[]   %删除A矩阵的第m行   删除某列: A(:,n)=[] %删除A矩阵的第n列 ...

  3. AUTOSAR-软件规范文档中的UML

    https://mp.weixin.qq.com/s/vm5vWNSpbNIYh25-LjJfYg   AUTOSAR软件规范文档中存在两种UML图: Sequence diagrams Config ...

  4. Java实现 LeetCode 357 计算各个位数不同的数字个数

    357. 计算各个位数不同的数字个数 给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n . 示例: 输入: 2 输出: 91 解释: 答案应为除去 11, ...

  5. Java实现算法竞赛入门经典例题-蚂蚁

    问题描述 一根长度为L厘米的木棍上有n只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为1厘米/秒. 当两只蚂蚁相撞时,二者同时掉头(掉头时间忽略不计). 给出每只蚂蚁的初始位置和朝向,计算T秒之后每只蚂 ...

  6. Java实现 LeetCode 218 天际线问题

    218. 天际线问题 城市的天际线是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓.现在,假设您获得了城市风光照片(图A)上显示的所有建筑物的位置和高度,请编写一个程序以输出由这些建筑物形成的天际线 ...

  7. Java实现 LeetCode 4 寻找两个有序数组的中位数

    寻找两个有序数组的中位数 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 n ...

  8. Java实现第九届蓝桥杯字母阵列

    字母阵列 题目描述 仔细寻找,会发现:在下面的8x8的方阵中,隐藏着字母序列:"LANQIAO". SLANQIAO ZOEXCCGB MOAYWKHI BCCIPLJQ SLAN ...

  9. java实现第五届蓝桥杯幂一矩阵

    幂一矩阵 天才少年的邻居 atm 最近学习了线性代数相关的理论,他对"矩阵"这个概念特别感兴趣.矩阵中有个概念叫做幂零矩阵.对于一个方阵 M ,如果存在一个正整数 k 满足 M^k ...

  10. 官宣!ASF官方正式宣布Apache Hudi成为顶级项目

    马萨诸塞州韦克菲尔德(Wakefield,MA)- 2020年6月 - Apache软件基金会(ASF).350多个开源项目和全职开发人员.管理人员和孵化器宣布:Apache Hudi正式成为Apac ...