爬虫系列1:python简易爬虫分析
决定写一个小的爬虫系列,本文是第一篇,讲爬虫的基本原理和简易示例。
1、单个网页的简易爬虫
以下爬虫的主要功能是爬取百度贴吧中某一页面的所有图片。代码由主要有两个函数:其中getHtml()通过页面url获取其对应的html内容,getImage()则通过解析html获取图片地址,实现图片的下载。
代码如下:
import urllib
import re
def getHtml(url):
"""通过页面url获取其对应的html内容
"""
page = urllib.urlopen(url) #打开页面
content = page.read() #读取页面内容
return content
def getImage(html):
"""通过解析html获取图片地址,实现图片的下载
"""
regx =r'src="(.+?\.jpg)" pic_ext' #利用正则表达式获得图片url
imgreg = re.compile(regx)
imglist = re.findall(imgreg,html)
x = 0
for imgurl in imglist:
filepath ='F:\\Downloads\\'+str(x)+'.jpg'
urllib.urlretrieve(imgurl,filepath) #将图片下载到本地
x += 1
print 'completed!'
html = getHtml('http://tieba.baidu.com/p/2505265675')
imglist = getImage(html)
2、爬取多网页的框架
这里只讲基本思想:第一步是选择一个起始页面,可以直接选择某个网站的主页作为起始页面;第二步是分析这个起始页面的所有链接,然后爬取所有链接的内容;第三步就是无休无止的递归过程,分析爬虫所及的所有子页面内部链接,如果没有爬取过,则继续无休无止的爬取。
借用知乎上谢科兄弟的一段代码来说明。设定初始页面initial_page,爬虫就从这里开始获取页面,url_queue用来存将要爬取的页面队列,seen用来存爬取过的页面。
import Queue
initial_page ="http://www.renminribao.com"
url_queue =Queue.Queue()
seen = set()
seen.insert(initial_page)
url_queue.put(initial_page)
while True:
if url_queue.size()>0:
current_url = url_queue.get() #取出队例中第一个的url
store(current_url) #把这个url代表的网页存储好
for next_url inextract_urls(current_url): #提取把这个url里链向的url
if next_url not in seen:
seen.put(next_url)
url_queue.put(next_url)
else:
break
实际写爬虫的时候我们一般还会限定爬虫运行的域(domain),限定域之外的链接不予爬取。有许多优秀的框架可以实现多网页的爬虫,用python写的话我推荐Scrapy。
爬虫系列1:python简易爬虫分析的更多相关文章
- 爬虫系列(二) Chrome抓包分析
在这篇文章中,我们将尝试使用直观的网页分析工具(Chrome 开发者工具)对网页进行抓包分析,更加深入的了解网络爬虫的本质与内涵 1.测试环境 浏览器:Chrome 浏览器 浏览器版本:67.0.33 ...
- python简易爬虫来实现自动图片下载
菜鸟新人刚刚入住博客园,先发个之前写的简易爬虫的实现吧,水平有限请轻喷. 估计利用python实现爬虫的程序网上已经有太多了,不过新人用来练手学习python确实是个不错的选择.本人借鉴网上的部分实现 ...
- Python爬虫系列(五):分析HTML结构
今晚,被烦死了.9点多才下班,就想回来看书学习,结果被唠叨唠叨个小时,我不断喊不要和我聊天了,还反复说.我只想安安静静看看书,学习学习,全世界都不要打扰我 接着上一个讨论,我们今晚要分析HTML结构了 ...
- python简易爬虫实现
目的:爬取昵称 目标网站:糗事百科 依赖的库文件:request.sys.beautifulSoup4.imp.io Python使用版本:3.4 说明:参考http://cn.python-requ ...
- Python简易爬虫
经常需要下载论文,每次都需要去网页上搜索,然后点击下载,实在麻烦,正好最近刚入门Python,心血来潮,想着写一个爬虫 经过一天查阅资料,基本算是完成了,但是还是不足,比如对知网和万方暂时还不行,但是 ...
- Python简易爬虫爬取百度贴吧图片
通过python 来实现这样一个简单的爬虫功能,把我们想要的图片爬取到本地.(Python版本为3.6.0) 一.获取整个页面数据 def getHtml(url): page=urllib.requ ...
- 【Python】Python简易爬虫爬取百度贴吧图片
通过python 来实现这样一个简单的爬虫功能,把我们想要的图片爬取到本地.(Python版本为3.6.0) 一.获取整个页面数据 def getHtml(url): page=urllib.requ ...
- python简易爬虫,帮助理解re模块
20161203更新: 1.使用了BS4解析html 2.使用了mysql-connector插入了数据库表 pip install mysql-connector import urllib.req ...
- 爬虫系列(三) urllib的基本使用
一.urllib 简介 urllib 是 Python3 中自带的 HTTP 请求库,无需复杂的安装过程即可正常使用,十分适合爬虫入门 urllib 中包含四个模块,分别是 request:请求处理模 ...
随机推荐
- 关于StringUtils的常用方法
StringUtils.split(String, char) * <pre> * StringUtils.split(null, *) = null * StringUtils.spli ...
- python--model进阶
一.QuerySet 1.可切片 使用Python 的切片语法来限制查询集记录的数目 .它等同于SQL 的LIMIT 和OFFSET 子句. >>> Entry.objects.a ...
- Yii2框架RESTful API教程
前不久做一个项目,是用Yii2框架写一套RESTful风格的API,就去查了下<Yii 2.0 权威指南 >,发现上面写得比较简略.所以就在这里写一篇教程贴,希望帮助刚接触Yii2框架RE ...
- Node.js + Express 接口请求(GET、POST、PUT)事例
路由 路由是指应用程序的端点(URI)如何响应客户端请求.有关路由的介绍,请参阅基本路由. 您可以使用Express app对象的方法定义路由,这些方法对应于HTTP方法; 例如,app.get()处 ...
- Tomcat指定JDK路径(Linux+Windows)
当系统有多套JDK,不方便在系统配统一的JAVA_HOME时,我们可能想给tomcat指定JDK路径. 1.Linux下Tomcat指定JDK路径 找到$CATALINE_HOME/bin/catal ...
- MySQL安装教程(mysql5.6_bundle)
1.下载软件包 下载链接:https://dev.mysql.com/downloads/mysql/5.6.html#downloads centos6--MySQL-5.6.35-1.el6.x8 ...
- QAbstractItemView区分单双击
系统不可能知道你这一次单击鼠标是为了双击指令,所以在你第一次按下鼠标时,系统会发出一个WM_XBUTTONDOWN(也就是clicked), 当你第二次单击鼠标时,系统先发送WM_XBUTTONDOW ...
- 使用Redis数据库(1)(三十三)
Spring Boot中除了对常用的关系型数据库提供了优秀的自动化支持之外,对于很多NoSQL数据库一样提供了自动化配置的支持,包括:Redis, MongoDB, Elasticsearch, So ...
- 通过JdbcTemplate编写数据访问(二十八)
数据源配置 在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同的数据库配置方式. 首先,为了连接数据库需要引入jdbc支持,在pom.xml中引入如下配置: 1 2 3 4 < ...
- How can I perform the likelihood ratio, Wald, and Lagrange multiplier (score) test in Stata?
http://www.ats.ucla.edu/stat/stata/faq/nested_tests.htm The likelihood ratio (lr) test, Wald test, ...