一、说明

最近心血来潮想学一下爬虫,简单看了些速成视频,用scrapy从一些结构简单的网站上爬了一些数据下来,这里记录一下步骤。

下图是把人家的ip扒下来了。

二、环境准备(下载pycharm,创建scrapy项目)

我是在Windows上弄的,首先下一个pycharm,然后创建一个项目,项目名一般是取要爬的网站的域名+Spider,这个没什么规定,只是习惯,比如说要爬这个网址:

https://www.kuaidaili.com/free/

项目名就取 kuaidailiSpider 吧:

然后 import scrapy 让pycharm帮忙把环境准备一下:


装好之后,进入项目根目录:

venv\Scripts

这个目录里面有 scrapy.exe ,复制一下这个路径,回到项目根目录(main.py所在的位置),打开终端:

通过相对路径运行 scrapy.exe 创建一个 scrapy 项目:

./venv/Scripts/scrapy.exe startproject kuaidailiSpider

创建好项目之后,在pycharm里可以看到文件结构的变化:

到现在为止,scrapy项目就创建好了。

三、创建spider类

终端中进入 kuaidailiSpider 目录,里面应该有一个 cfg 文件的:

在这个有 cfg 文件的目录下执行下面的命令来创建一个 spider 类:

../venv/Scripts/scrapy.exe genspider kuaidaili kuaidaili.com

这个命令的意思是生成 spider 类,类名是 kuaidaili ,爬取路径是 kuaidaili.com.

执行成功后发现 spider 目录下多了一个文件 kuaidaili.py

接下来的爬虫代码基本都在这里完成,但是在此之前先要完成一些其他设置。

四、修改设置文件

修改 settings.py,把遵守规则改成false:

因为如果遵守规则,可能什么都爬不到,只能铤而走险啦!

然后在请求头这里,取消注释,然后加一个 user-agent,这个 user-agent 你可以去浏览器上按F12,然后刷新网页,从 network 那里找一个网页,把它的 user-agent 复制过来:

这里就是说,默认是没有请求头的,我们加一个,伪装成 chrome 浏览器,这样网站就以为我们是人了。

但是我们也不是坏人,为了不把网站搞爆,出于良心,我把延时加上了,这个你也可以不加:

准备工作做完啦!

五、编写爬虫代码(爬取第一个页面)

打开爬虫文件,默认模板是这样的:

parse 函数是每次下载网页之后的回调函数,我们在这里写代码。首先回到浏览器,把鼠标放在想要观察的ip这里,右键点检查,观察HTML结构:


发现是一个 tr 里面有很多 td,我们只需遍历所有 tr 再遍历里面的 td 就行了,这里涉及 xpath 语法,我也不懂,反正我是照着视频的代码改的:

注意 start_urls 是开始爬取的页面,这里改成:

start_urls = ['http://kuaidaili.com/free']

写好了,然后回到终端,输入这个命令开始爬虫:

../venv/Scripts/scrapy.exe crawl kuaidaili

这样就算是把第一个页面爬好了,我们可以把这些数据存到数据库或者磁盘上。

六、翻页爬取

如果想翻页咋办呢,我们研究一下翻页对url的影响,发现规律如下:

https://www.kuaidaili.com/free/inha/1/
https://www.kuaidaili.com/free/inha/2/
https://www.kuaidaili.com/free/inha/3/
...

后面的数字表示页码。

右键检查,由于没有下一页按钮,所以只能通过 active 类找到当前页面,然后 +1 了。

class 是 active,我们可以通过 xpath 获取 href,这里就照猫画虎,我也懒得学这个 xpath,xpath 是这样子的:

//a[@class="active"]/@href

最终代码是这样的,如果运行爆503错误,就是被反爬了,解决方案就是修改 settings 文件,加 user-agent,加延时,关闭 obey。

import scrapyclass KuaidailiSpider(scrapy.Spider):name = 'kuaidaili'allowed_domains = ['kuaidaili.com']start_urls = ['http://kuaidaili.com/free']def parse(self, response):selectors = response.xpath("//tr")  # 选择所有tr标签# 遍历tr标签下的td标签for selector in selectors:ip = selector.xpath("./td[1]/text()").get()port = selector.xpath("./td[2]/text()").get()print(ip, port)# 翻页,每个网站不一样,我测试的 Kuaidaili 就没有下一页current_page = response.xpath('//a[@class="active"]/@href').get()print(current_page)current_page_id = int(current_page[current_page[:-1].rfind("/") + 1:-1])print(current_page_id)if current_page and current_page_id < 3:current_url = response.urljoin(current_page)next_url = current_url[:current_url[:-1].rfind("/") + 1] + str((int(current_url[current_url[:-1].rfind("/") + 1:-1]) + 1)) + "/"print(next_url)# 页码+1得到下一页# 发出请求yield scrapy.Request(next_url, callback=self.parse)print("----------------------------------------------------------------\n\n\n")

运行爬虫要用 crawl 参数,如下图:

../venv/Scripts/scrapy.exe crawl kuaidaili

第一次scrapy爬虫记录相关推荐

  1. java启动scrapy爬虫,爬虫入门之Scrapy 框架基础功能(九)详解

    Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非 ...

  2. python创建scrapy_Python爬虫教程-31-创建 Scrapy 爬虫框架项目

    首先说一下,本篇是在 Anaconda 环境下,所以如果没有安装 Anaconda 请先到官网下载安装 Scrapy 爬虫框架项目的创建0.打开[cmd] 1.进入你要使用的 Anaconda 环境1 ...

  3. Scrapy爬虫及案例剖析

    来自:ytao 由于互联网的极速发展,所有现在的信息处于大量堆积的状态,我们既要向外界获取大量数据,又要在大量数据中过滤无用的数据.针对我们有益的数据需要我们进行指定抓取,从而出现了现在的爬虫技术,通 ...

  4. scrapy爬虫储存到mysql_详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库

    获取要爬取的URL 爬虫前期工作 用Pycharm打开项目开始写爬虫文件 字段文件items # Define here the models for your scraped items # # S ...

  5. python的scrapy爬虫可以将爬去的数据放入数据库吗_Python基于Scrapy的爬虫 数据采集(写入数据库)...

    上一节已经学了如何在spider里面对网页源码进行数据过滤. 这一节将继续学习scrapy的另一个组件-pipeline,用来2次处理数据 (本节中将以储存到mysql数据库为例子) 虽然scrapy ...

  6. python每天定时9点执行_[求助]关于twisted框架,如何每天定时执行一个scrapy爬虫...

    RT,最近在学scrapy,写了一个简单的爬取网页数据的爬虫,利用CrawlProcess单次调用执行的时候没有问题,脚本如下,就是清空数据表然后爬取数据: class updateBoardData ...

  7. scrapy 图片url 转base64_一文快速掌握 scrapy 爬虫框架

    (给Python开发者加星标,提升Python技能) 作者:wedo实验君 [导语]scrapy是一款优秀的纯python爬虫框架,也是当今开源领域最流行的爬虫框架,本文接近全面的介绍了scrapy框 ...

  8. python scrapy框架爬虫_Python Scrapy爬虫框架

    Scrapy爬虫框架结构: 数据流的3个路径: 一: 1.Engine从Spider处获得爬取请求(Request) 2.Engine将爬取请求转发给Scheduler,用于调度 二: 3.Engin ...

  9. linux scrapy 定时任务_2019Python学习教程(全套Python学习视频):Scrapy爬虫框架入门...

    Scrapy爬虫框架入门 Scrapy概述 Scrapy是Python开发的一个非常流行的网络爬虫框架,可以用来抓取Web站点并从页面中提取结构化的数据,被广泛的用于数据挖掘.数据监测和自动化测试等领 ...

最新文章

  1. 详解MYSQL数据库密码的加密方式及破解方法
  2. C# - list数据填充到Dataset里
  3. javaScript 里面的cookies
  4. bootstrap轮播图怎么居中
  5. python练习2 购物车程序
  6. 9月14日学习内容整理:初识别面向对象
  7. python中numpy.ndarray与list的区别?以及用matplotlab.pyplot绘图时的注意事项。
  8. python报错ordinal not in range(128)
  9. OSI模型数据链路层为什么需要分层?
  10. C++工作笔记-对'xxxxx'未定义的引用的2种情况
  11. struts教程笔记3
  12. Vulnstack红日安全内网域渗透靶场1实战
  13. “网易有钱”sketch使用分享
  14. 易语言版{大智慧/分析家/飞狐交易师}DLL插件接口开发模块(beta5),自定义股票软件公式扩展函数...
  15. windows清理缓存性能加速
  16. 计算机电缆电阻值,一文看懂5个电线电缆电阻检测方法
  17. html产生圆点列表符号的列表,HTML 测验
  18. 微软开发的www服务器程序是,WebDeploy 微软开发的IIS6同步应用程序
  19. Mac下载软件Motrix 下载速度为零解决办法
  20. CSS选择器有哪几种?举例轻松理解CSS选择器

热门文章

  1. 重新考虑数据中心的冷却方案—水冷却或将再次兴起
  2. Database之SQLSever:SQLSever数据库管理学习并深入理解SQL命令语句进阶综合篇《初级→中级→高级》(持续更新,建议收藏)
  3. TF之LSTM:利用多层LSTM算法对MNIST手写数字识别数据集进行多分类
  4. ML之LoRBaggingRF:依次利用LoR、Bagging、RF算法对泰坦尼克号数据集 (Kaggle经典案例)获救人员进行二分类预测——优化baseline模型
  5. EL之RF(随机性的Bagging+DTR):利用随机选择属性的bagging方法解决回归(对多变量的数据集+实数值评分预测)问题
  6. SQLServer:GUI方式、SQL语句两种方式建立视图和GUI方式设置主键、约束等
  7. 数组作为形参时的一个陷阱
  8. Linux下的inode记录
  9. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(40)-精准在线人数统计实现-【过滤器+Cache】...
  10. Hlg 1407 【最小点权覆盖】.cpp