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的内容) [爬取的是杨子晚报 ...
随机推荐
- GDAL书籍中删除数据勘误(C#语言)
GDAL书籍中关于C#版本删除数据的时候,不能完全删除数据,由于我对C#不了解导致代码有点问题,非常感谢@Bingoyin指出并给出修改方案.此外对于栅格图像的删除.重命名,矢量数据的删除和重命名都有 ...
- android自定义View-继承
介绍anroid通过继承系统的控件自定义view 方法是通过对OnDraw()方法进行复写来实现的 举例继承TextView 在textView的背景加上矩形的效果 代码实现 testView的代码 ...
- 1085. Perfect Sequence (25) -二分查找
题目如下: Given a sequence of positive integers and another positive integer p. The sequence is said to ...
- (八十六)使用系统自带的分享框架Social.framework
使用Social.framework十分简单,能够便捷的分享到主流的社交框架. ①导入主头文件 #import <Social/Social.h> ②以新浪微博为例,首先判断服务是否可用, ...
- JSP标签JSTL(3)--迭代操作
简单点说,<c:forEach>标签的作用就是迭代输出标签内部的内容.它既可以进行固定次数的迭代输出,也可以依据集合中对象的个数来决定迭代的次数. <!--语法使用如下--> ...
- Cocos2D中屏幕分辨率解释
Cocos2D的坐标(0,0)点在屏幕的左下角,然后x和y的坐标值像右上角逐渐增加. 因为项目一般是横屏(landscape)模式,这表示右上角坐标在3.5寸屏上为(480,320), 在4寸屏上为( ...
- 15-5-23 下午02时22分58秒 CST> <Info> <Management> <BEA-141281> <unable to get file lock, will retry ...>
A-141281> <unable to get file lock, will retry ...> http://gdutlzh.blog.163.com/blog/s ...
- 深入解析Linux中的fork函数
1.定义 #include <unistd.h> #include<sys/types.h> pid_t fork( void ); pid_t 是一个宏定义,其实质是int, ...
- sublimeText3使用记录
sublime确实是神器,最近学习了一下,做个记录 1.下载 http://www.sublimetext.com/3 选择对应的版本安装即可(我的是win10 64位机) 2.个人配置 2.1.默认 ...
- 【一天一道LeetCode】#47. Permutations II
一天一道LeetCode系列 (一)题目 Given a collection of numbers that might contain duplicates, return all possibl ...