9.3.3 scrapy 框架
scrapy是一个非常好用的Web爬虫框架,非常适合抓取Web站点从网页中提取结构化的数据,并且支持自定义的需求。在使用scrapy爬取网页数据时,除了熟悉HTML标签,还需要了解目标网页的数据组织结构,确定要爬取什么信息,这样才能针对性地编写爬虫程序。
使用pip命令安装好scrapy扩展库。在安装过程中遇到的报错需要自己根据报错内容百度并解决,培养自己动手解决问题的能力。
import scrapy
import os
import urllib.request #自定义一个爬虫类
class MySpider(scrapy.spiders.Spider):
#爬虫的名字,每个爬虫都必须有不同的名字,类变量
name = 'mySpider'
allowed_domains=['www.sdibt.edu.cn'] #要爬取的其实页面,必须是列表,可以匹配多个RUL
start_urls = ['http://www.sdibt.edu.cn/info/1026/11238.htm'] #针对每个要爬取的网页,会自动调用下面这个方法
def parse(self,response):
self.downloadWebpage(response)
self.downloadImages(response) #检查页面中的超链接,并继续爬取
hxs = scrapy.Selector(response)
sites = hxs.spath('//ul/li') for site in sites:
link = site.xpath('a/@href').extract()[0]
if link == '#':
continue
#把相对地址转换为绝对地址
elif link.startswith('..'):
next_url = os.path.dirname(response.rul)
next_url += '/' + link
else:
next_url = link #生成Request对象,并指定回调函数
yield scrapy.Request(url = next_url,callback = self.parse_item) #回调函数,对起始页面中的每个超链接其作用
def parse_item(self,response):
self.downloadWebpage(response)
self.downloadImages(response) #下载当前页面中所有图片
def downloadImages(self,response):
hxs = scrapy.Selector(response)
images = hxs.xpath('//img/@src').extract() for image_url in images:
imageFilename = image_url.split('/')[-1]
if os.path.exists(imageFilename):
continue #把相对地址转换为绝对地址
if image_url.startswith('..'):
image_url = os.path.dirname(response.url) + '/' + image_url #打开网页图片
fp=urllib.request.urlopen(image_url)
#创建本地图片文件
with open(imageFilename,'wb') as f:
f.write(fp.read())
fp.close() #把网页内容保存为本地文件
def downloadWebpage(self,response):
filename = response.rul.split('/')[-1]
with open(filename,'wb') as f:
f.write(response.body)
最后在命令提示符环境中执行下面的命令启动爬虫程序开始爬取数据:
scrapy crawl mySpider
Scrapy入门教程链接:
http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html
9.3.3 scrapy 框架的更多相关文章
- Python爬虫Scrapy框架入门(2)
本文是跟着大神博客,尝试从网站上爬一堆东西,一堆你懂得的东西 附上原创链接: http://www.cnblogs.com/qiyeboy/p/5428240.html 基本思路是,查看网页元素,填写 ...
- Python爬虫Scrapy框架入门(1)
也许是很少接触python的原因,我觉得是Scrapy框架和以往Java框架很不一样:它真的是个框架. 从表层来看,与Java框架引入jar包.配置xml或.property文件不同,Scrapy的模 ...
- Scrapy框架使用—quotesbot 项目(学习记录一)
一.Scrapy框架的安装及相关理论知识的学习可以参考:http://www.yiibai.com/scrapy/scrapy_environment.html 二.重点记录我学习使用scrapy框架 ...
- Python爬虫从入门到放弃(十一)之 Scrapy框架整体的一个了解
这里是通过爬取伯乐在线的全部文章为例子,让自己先对scrapy进行一个整理的理解 该例子中的详细代码会放到我的github地址:https://github.com/pythonsite/spider ...
- Python爬虫从入门到放弃(十二)之 Scrapy框架的架构和原理
这一篇文章主要是为了对scrapy框架的工作流程以及各个组件功能的介绍 Scrapy目前已经可以很好的在python3上运行Scrapy使用了Twisted作为框架,Twisted有些特殊的地方是它是 ...
- python爬虫scrapy框架——人工识别登录知乎倒立文字验证码和数字英文验证码(2)
操作环境:python3 在上一文中python爬虫scrapy框架--人工识别知乎登录知乎倒立文字验证码和数字英文验证码(1)我们已经介绍了用Requests库来登录知乎,本文如果看不懂可以先看之前 ...
- 一个scrapy框架的爬虫(爬取京东图书)
我们的这个爬虫设计来爬取京东图书(jd.com). scrapy框架相信大家比较了解了.里面有很多复杂的机制,超出本文的范围. 1.爬虫spider tips: 1.xpath的语法比较坑,但是你可以 ...
- 安装scrapy框架的常见问题及其解决方法
下面小编讲一下自己在windows10安装及配置Scrapy中遇到的一些坑及其解决的方法,现在总结如下,希望对大家有所帮助. 常见问题一:pip版本需要升级 如果你的pip版本比较老,可能在安装的过程 ...
- 关于使用scrapy框架编写爬虫以及Ajax动态加载问题、反爬问题解决方案
Python爬虫总结 总的来说,Python爬虫所做的事情分为两个部分,1:将网页的内容全部抓取下来,2:对抓取到的内容和进行解析,得到我们需要的信息. 目前公认比较好用的爬虫框架为Scrapy,而且 ...
- 利用scrapy框架进行爬虫
今天一个网友问爬虫知识,自己把许多小细节都忘了,很惭愧,所以这里写一下大概的步骤,主要是自己巩固一下知识,顺便复习一下.(scrapy框架有一个好处,就是可以爬取https的内容) [爬取的是杨子晚报 ...
随机推荐
- Objc中为何某些类的属性要设置为copy而不是strong?
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 不知道大家是否注意,我们再使用一些第三方类的时候大多数情况下对 ...
- 剑指Offer——贪心算法
剑指Offer--贪心算法 一.基本概念 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解.虽然贪心算法不能对 ...
- shell入门之流程控制语句
1.case 脚本: #!/bin/bash #a test about case case $1 in "lenve") echo "input lenve" ...
- UNIX网络编程——设置套接字超时
在涉及套接字的I/O操作上设置超时的方法有以下3种: 调用alarm,它在指定超时期时产生SIGALRM信号.这个方法涉及信号处理,而信号处理在不同的实现上存在差异,而且可能干扰进程中现有的alarm ...
- 从二进制数据流中构造GDAL可以读取的图像数据
在很多时候,我们的图像数据往往都不是文件方式存储在磁盘上,而是可能从网络或者数据库中获取的是二进制的图像数据流.最简单的方式和最容易想到的方式就是将这个文件流保存到磁盘上形成一个文件,然后再使用GDA ...
- 【一天一道LeetCode】#165. Compare Version Numbers
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 来源: htt ...
- 安卓banner图片轮播
之前写过一篇关于首页图片广告轮播的demo:http://blog.csdn.net/baiyuliang2013/article/details/45740091,不过图片轮播的指示器(小白点)处操 ...
- ListView控件使用
//ListView标头的代码创建方法. ColumnHeader title=new ColumnHeader(); //声明标头,并创建对象. title.Text="标头1名称&quo ...
- ADO.NET常用方法释义
先列个列表,下面的就是常用的数据库操作的方法. ExecuteNonQuery 释义:对链接执行的SQL语句,并返回受影响的行数(注意:用它来执行目录操作,如查询数据库的结构,创建表等数据库对象,或通 ...
- 自定义gradle的property
在android studio上运行项目,gradle的配置是必不可少的,但是随着项目的逐渐成长,迎面而来的就是.各种依赖包的添加,数不胜数的签名,渠道包等,整个gradle变得很乱,这样其实我们可以 ...