Python 爬虫 —— scrapy
0. 创建网络爬虫的常规方法
进入命令行(操作系统的命令行,不是 python 的命令行)
- windows:
cmd
⇒c:\Uses\Adminstrator>
- Linux:
$
- windows:
执行:
scrapy startproject myfirstproj
会自动创建一些文件:
- __init__.py items.py
- pipelines.py settings.py spiders
1. settings.py
settings.py
是爬虫的主要配置文件,其中的几个配置项为:
USER_AGENT(用户代理,简称 UA),也即向 http 发请求时,表明自己的身份,这里为了演示的需要,我们将其(真实身份是爬虫)伪造成浏览器,改成:
USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'
ROBOTSTXT_OBEY表示是否遵守robots协议(被封禁的不抓取),因为我们的目的不纯,所以我们不遵守,改成
ROBOTSTXT_OBEY = False
DOWNLOAD_DELAY 表示对同一个站点抓取延迟,也就是抓一个,歇一会,再抓一个,再歇一会,为了对对方站点冲(yi)击(bei)太(fa)大(xian),我们调整为1,也就是一秒抓一个
CONCURRENT_REQUESTS_PER_DOMAIN 表示对同一个站点并发有多少个线程抓取,同样道理,我们也调整为 1
CONCURRENT_REQUESTS_PER_IP 同理也调整为 1
2. 爬虫程序的编写
接着我们进入 spiders 文件夹,创建第一个爬虫程序,如下:
import scrapy
class MySpider(scrapy.Spider):
name = 'zhang'
# 该项目名,启动时也用这个名字
allowed_domains= ['blog.csdn.net']
start_urls = [
'http://blog.csdn.net/lanchunhui'
]
# response.url ⇒ 'http://blog.csdn.net/lanchunhui'
def parse(self, response):
filename = response.url.split('/')[-2] + '.html'
with open(filename, 'wb') as f:
f.write(respobse.body)
这里面 start_urls 是初始抓取时的种子链接(seed),parse 方法在抓取完成后自动调用,会把抓取回来的 body 内容写到以 .html
为结尾的文件中。
然后退到上一级目录执行:
> scrapy crawl zhang
执行完成后会多出来一个 blog.csdn.net.html
文件,内容就是http://blog.csdn.net/lanchunhui
网页的内容
3. items.py
items.py 是抓取结果解析出来的结构体;
4. 页面解析
页面解析,这是所有的网络爬虫不能忽略的功能,而且是最核心的部分。python 库用于页面解析的有 BeautifulSoup(速度慢)和 Ixml(非标准库),Scrapy 基于 Ixml 实现了一套页面解析工具,叫做 Selectors。
其使用也十分简单,创建 TestSelectors.py 文件如下:
from scrapy.selector import Selector
from scrapy.http import HtmlResponse
body = '<html><body>hello<span>world</span></body></html>'
span_text = Selector(text=body).xpath('//span/text()').extract()
print(span_text)
进入终端,执行:
> python TestSelectors.py
[u'world']
注意:
如果想获取文本,调用 selector 的 xpath 方法后要调用 extract() 方法
如果想找到第一个匹配 xpath 的内容,需要调用 extract_first() 方法
5. 调试页面解析
scrapy 提供了极为简单的页面解析方法,直接执行
> scrapy shell www.baidu.com
...
In [1]:
进入调试终端,可以直接使用 request、response 等变量来做各种操作尝试.
Python 爬虫 —— scrapy的更多相关文章
- python爬虫scrapy框架——人工识别登录知乎倒立文字验证码和数字英文验证码(2)
操作环境:python3 在上一文中python爬虫scrapy框架--人工识别知乎登录知乎倒立文字验证码和数字英文验证码(1)我们已经介绍了用Requests库来登录知乎,本文如果看不懂可以先看之前 ...
- python爬虫Scrapy(一)-我爬了boss数据
一.概述 学习python有一段时间了,最近了解了下Python的入门爬虫框架Scrapy,参考了文章Python爬虫框架Scrapy入门.本篇文章属于初学经验记录,比较简单,适合刚学习爬虫的小伙伴. ...
- python爬虫scrapy项目详解(关注、持续更新)
python爬虫scrapy项目(一) 爬取目标:腾讯招聘网站(起始url:https://hr.tencent.com/position.php?keywords=&tid=0&st ...
- Python爬虫Scrapy框架入门(0)
想学习爬虫,又想了解python语言,有个python高手推荐我看看scrapy. scrapy是一个python爬虫框架,据说很灵活,网上介绍该框架的信息很多,此处不再赘述.专心记录我自己遇到的问题 ...
- [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍
前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...
- 安装python爬虫scrapy踩过的那些坑和编程外的思考
这些天应朋友的要求抓取某个论坛帖子的信息,网上搜索了一下开源的爬虫资料,看了许多对于开源爬虫的比较发现开源爬虫scrapy比较好用.但是以前一直用的java和php,对python不熟悉,于是花一天时 ...
- Python 爬虫-Scrapy爬虫框架
2017-07-29 17:50:29 Scrapy是一个快速功能强大的网络爬虫框架. Scrapy不是一个函数功能库,而是一个爬虫框架.爬虫框架是实现爬虫功能的一个软件结构和功能组件集合.爬虫框架是 ...
- python爬虫scrapy学习之篇二
继上篇<python之urllib2简单解析HTML页面>之后学习使用Python比较有名的爬虫scrapy.网上搜到两篇相应的文档,一篇是较早版本的中文文档Scrapy 0.24 文档, ...
- Python爬虫Scrapy(二)_入门案例
本章将从案例开始介绍python scrapy框架,更多内容请参考:python学习指南 入门案例 学习目标 创建一个Scrapy项目 定义提取的结构化数据(Item) 编写爬取网站的Spider并提 ...
- python爬虫----scrapy框架简介和基础应用
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以 ...
随机推荐
- Android中图形截取的方式介绍
在Android的应用中,有时候我们想仅仅显示一部分图像,这时候就要求图形截图. 1.随意截取图像的方法,以下我们具体介绍一下android中的重要类--Bitmap public final cla ...
- js进阶解决浏览器缓存不能自动更新的问题(在ajax的url上带上一个参数,可以是日期,或者是随机数)(随机数Math.random)(取得日期的毫秒数:new Date().getTime();)
js进阶解决浏览器缓存不能自动更新的问题(在ajax的url上带上一个参数,可以是日期,或者是随机数)(随机数Math.random)(取得日期的毫秒数:new Date().getTime();) ...
- angular的Dom操作
原文 https://www.jianshu.com/p/9d7249922bda 大纲 1.angular的DOM操作 2.为什么不能直接操作DOM? 3.三种错误操作DOM的方式 4.angula ...
- linux系统下安装与配置apache
搭建环境:VMware上虚拟的linux 主机:win 7 安装linux下的Apache前准备: 1.httpd服务的配置文件,默认存储路径:/etc/httpd/conf/httpd.conf( ...
- ios开发网络学习六:设置队列请求与RunLoop
#import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDelegate> ...
- GitHub项目协作基本步骤 分类: C_OHTERS 2013-09-23 21:31 690人阅读 评论(0) 收藏
1.查找某个项目,然后Fork 2.打开GitHub For Windows,发现刚才Fork的项目 3.对着项目点击Clone,将之复制至本地 4.使用Eclipse等进行开发,如新增一个文件 5. ...
- (转)PHP 函数的实现原理及性能分析
前言 任何语言中,函数都是最基本的组成单元.对于php的函数,它具有哪些特点?函数调用是怎么实现的?php函数的性能如何,有什么使用建议?本文 将从原理出发进行分析结合实际的性能测试尝试对这些问题进行 ...
- .NET-架构优化实战-前端优化
原文:.NET-架构优化实战-前端优化 前言 上一篇<.NET-架构优化实战-梳理篇>整理了基本的业务知识,同时也罗列了存在的问题,本篇主要是针对任务列表的页面进行性能优化. 该篇主要涉及 ...
- 使用Fernflower 比较准确的反编译整个java项目
以前一直使用jd-gui.exe ,都说是最好用的,但是编译总是有问题,还得修改,使用idea 后,感觉反编译的相当好,看注释是 Fernflower,然后参考 http://the.bytecod ...
- expdp之后scp的惊险时刻
今天在导出数据的时候.忽然就想起了上次导数据的惊险时刻. 当时导出数据,有40g.分盘./backup有几T的空间,非常easy.果断搞! 是daochu.dmp,导出后传到还有一个主机,还有一个主机 ...