决定写一个小的爬虫系列,本文是第一篇,讲爬虫的基本原理和简易示例。

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简易爬虫分析的更多相关文章

  1. 爬虫系列(二) Chrome抓包分析

    在这篇文章中,我们将尝试使用直观的网页分析工具(Chrome 开发者工具)对网页进行抓包分析,更加深入的了解网络爬虫的本质与内涵 1.测试环境 浏览器:Chrome 浏览器 浏览器版本:67.0.33 ...

  2. python简易爬虫来实现自动图片下载

    菜鸟新人刚刚入住博客园,先发个之前写的简易爬虫的实现吧,水平有限请轻喷. 估计利用python实现爬虫的程序网上已经有太多了,不过新人用来练手学习python确实是个不错的选择.本人借鉴网上的部分实现 ...

  3. Python爬虫系列(五):分析HTML结构

    今晚,被烦死了.9点多才下班,就想回来看书学习,结果被唠叨唠叨个小时,我不断喊不要和我聊天了,还反复说.我只想安安静静看看书,学习学习,全世界都不要打扰我 接着上一个讨论,我们今晚要分析HTML结构了 ...

  4. python简易爬虫实现

    目的:爬取昵称 目标网站:糗事百科 依赖的库文件:request.sys.beautifulSoup4.imp.io Python使用版本:3.4 说明:参考http://cn.python-requ ...

  5. Python简易爬虫

    经常需要下载论文,每次都需要去网页上搜索,然后点击下载,实在麻烦,正好最近刚入门Python,心血来潮,想着写一个爬虫 经过一天查阅资料,基本算是完成了,但是还是不足,比如对知网和万方暂时还不行,但是 ...

  6. Python简易爬虫爬取百度贴吧图片

    通过python 来实现这样一个简单的爬虫功能,把我们想要的图片爬取到本地.(Python版本为3.6.0) 一.获取整个页面数据 def getHtml(url): page=urllib.requ ...

  7. 【Python】Python简易爬虫爬取百度贴吧图片

    通过python 来实现这样一个简单的爬虫功能,把我们想要的图片爬取到本地.(Python版本为3.6.0) 一.获取整个页面数据 def getHtml(url): page=urllib.requ ...

  8. python简易爬虫,帮助理解re模块

    20161203更新: 1.使用了BS4解析html 2.使用了mysql-connector插入了数据库表 pip install mysql-connector import urllib.req ...

  9. 爬虫系列(三) urllib的基本使用

    一.urllib 简介 urllib 是 Python3 中自带的 HTTP 请求库,无需复杂的安装过程即可正常使用,十分适合爬虫入门 urllib 中包含四个模块,分别是 request:请求处理模 ...

随机推荐

  1. python记录_day04(补充)

    列表删除 切片删除 del lis[1:3]  # 删除索引是1,2的元素 修改 索引切片修改 # 修改 lst = ["太白", "太", "五&q ...

  2. const typedef 和指针的问题(这里必须初始化的才初始化了,不必须的则没有初始化)

    这里很容易搞混: tyepdef double dou;//这里是dou是double的别名 #include<iostream> using namespace std; int mai ...

  3. 关于react16.4——错误边界

    过去,组件内的 JavaScript 错误常常会破坏 React 内部状态,并导致它在下一次渲染时产生神秘的错误.这些错误总会在应用代码中较早的错误引发的,但 React 并没有提供一种方式能够在组件 ...

  4. 集成学习二: Boosting

    目录 集成学习二: Boosting 引言 Adaboost Adaboost 算法 前向分步算法 前向分步算法 Boosting Tree 回归树 提升回归树 Gradient Boosting 参 ...

  5. ECharts 报表事件联动系列三:柱状图,饼状图实现联动

    源码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" c ...

  6. 牛客网 PAT 算法历年真题 1002 :数字分类 (20)

    1002 :数字分类 (20) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 给定一系列正整数,请按要求对数字 ...

  7. 微信订阅号,获取用户openid

    在微信后台,启用服务器配置. 服务器URL地址,要通过Token的验证. private void Auth() { string token = ConfigurationManager.AppSe ...

  8. java集合类,详解

    集合详解 1.1HashSet HashSet是Set接口的一个子类,主要的特点是:里面不能存放重复元素,而且采用散列的存储方法,所以没有顺序.这里所说的没有顺序是指:元素插入的顺序与输出的顺序不一致 ...

  9. AI标尺,管理面板5.8

    拖动左上角的十字形,如图 重新定义坐标原点,双击十字形则恢复默认原点. 如果一个AI文件打开之后有多个画板,那么在重新存储的时候勾选“将每一个画板存储为单独的文件”那么每个画板都存储为单独的画板. “ ...

  10. Kafka.net使用编程入门(三)

    这个世界既不是有钱人的世界,也不是有权人的世界,它是有心人的世界. 一些有用的命令 1.列出主题:kafka-topics.bat --list --zookeeper localhost:2181 ...