利用python进行爬虫

编程入门 行业动态 更新时间:2024-10-10 00:20:07

利用python进行<a href=https://www.elefans.com/category/jswz/34/1770264.html style=爬虫"/>

利用python进行爬虫

注:教程在节“六”,前五节对爬虫进行说明和要求,Python语言可另外学习了解。

一、什么是网络爬虫?

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常被称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本,已被广泛应用于互联网领域。搜索引擎使用网络爬虫抓取Web网页、文档甚至图片、音频、视频等资源,通过相应的索引技术组织这些信息,提供给搜索用户进行查询。网络爬虫也为中小站点的推广提供了有效的途径,网站针对搜索引擎爬虫的优化曾风靡一时。

二、技术研究

基于目标数据模式的爬虫针对的是网页上的数据,所抓取的数据一般要符合一定的模式,或者可以转化或映射为目标数据模式。

另一种描述方式是建立目标领域的本体或词典,用于从语义角度分析不同特征在某一主题中的重要程度。

三、网页爬虫

网页的抓取策略可以分为深度优先、广度优先和最佳优先三种。深度优先在很多情况下会导致爬虫的陷入(trapped)问题,目前常见的是广度优先和最佳优先方法。

广度优先搜索策略

广度优先搜索策略是指在抓取过程中,在完成当前层次的搜索后,才进行下一层次的搜索。该算法的设计和实现相对简单。在目前为覆盖尽可能多的网页,一般使用广度优先搜索方法。

最佳优先搜索策略

最佳优先搜索策略按照一定的网页分析算法,预测候选URL与目标网页的相似度,或与主题的相关性,并选取评价最好的一个或几个URL进行抓取。它只访问经过网页分析算法预测为“有用”的网页。

深度优先搜索策略

深度优先搜索策略从起始网页开始,选择一个URL进入,分析这个网页中的URL,选择一个再进入。如此一个链接一个链接地抓取下去,直到处理完一条路线之后再处理下一条路线。深度优先策略设计较为简单。

四、相关新闻

美情报官员透露:斯诺登凭“网络爬虫”小技获机密

2014年2月9日正在调查“棱镜门”事件的美国情报官员透露,前防务承包商雇员爱德华斯诺登只凭借比较简单的“网络爬虫”技术就获取了大量机密文件。

《纽约时报》援引了多名不愿公开身份情报官员的消息。据报道,经调查发现,斯诺登所使用的是比较廉价、也容易获取的“网络爬虫”或爬行器类软件,通过程序设定自动抓取大量数据,而不是一个人坐在电脑前一一查找、复制、下载大量文件。

五、爬虫设计前导知识

学习爬虫需要掌握:

基本的爬虫工作原理

基本的http抓取工具,scrapy

Bloom Filter: Bloom Filters by Example

如果需要大规模网页抓取,你需要学习分布式爬虫的概念。其实没那么玄乎,你只要学会怎样维护一个所有集群机器能够有效分享的分布式队列就好。最简单的实现是python-rq:

rq和Scrapy的结合:darkrho/scrapy-redis · GitHub

后续处理,网页析取(grangier/python-goose · GitHub),存储(Mongodb)

1、网页的基本知识:

基本的HTML语言知识 理解网站的发包和收包的概念(POST GET)

稍微一点点的js知识,用于理解动态网页

2、一些分析语言,为接下来解析网页内容做准备

NO.1 正则表达式:扛把子技术,总得会最基础的:

NO.2 XPATH:高效的分析语言,表达清晰简单,掌握了以后基本可以不用正则

参考:XPath 教程NO.3 Beautifulsoup:

美丽汤模块解析网页神器,一款神器,如果不用一些爬虫框架(如scrapy),配合request,urllib等模块,可以编写各种小巧精干的爬虫脚本

官网文档:Beautiful Soup 4.2.0 文档

参考案例:

NO.1 F12 开发者工具:

看源代码:快速定位元素

分析xpath:1、此处建议谷歌系浏览器,可以在源码界面直接右键看

NO.2 抓包工具:

推荐httpfox,火狐浏览器下的插件,比谷歌火狐系自带的F12工具都要好,可以方便查看网站收包发包的信息

NO.3 XPATH CHECKER (火狐插件):

非常不错的xpath测试工具,但是有几个坑:

1、xpath checker生成的是绝对路径,遇到一些动态生成的图标(常见的有列表翻页按钮等),飘忽不定的绝对路径很有可能造成错误,所以这里建议在真正分析的时候,只是作为参考

2、记得把如下图xpath框里的“x:”去掉,貌似这个是早期版本xpath的语法,目前已经和一些模块不兼容(比如scrapy),还是删去避免报错

六、利用python进行网页爬虫设计

一,获取整个页面数据

首先我们可以先获取要下载图片的整个页面信息。

getjpg.py

#coding=utf-8

import urllib

def getHtml(url):

page = urllib.urlopen(url)

Urllib 模块提供了读取web页面数据的接口,我们可以像读取本地文件一样读取www和ftp上的数据。首先,我们定义了一个getHtml()函数:

urllib.urlopen()方法用于打开一个URL地址。

read()方法用于读取URL上的数据,向getHtml()函数传递一个网址,并把整个页面下载下来。执行程序就会把整个网页打印输出。

二,筛选页面中想要的数据

Python 提供了非常强大的正则表达式,我们需要先要了解一点python 正则表达式的知识才行。.html

假如我们百度贴吧找到了几张漂亮的壁纸,通过到前段查看工具。找到了图片的地址,如:src=”......jpg”pic_ext=”jpeg”

修改代码如下:

import reimport urllibdef getHtml(url):

page = urllib.urlopen(url)

html = page.read() return htmldef getImg(html):

reg = r'src="(.+?\.jpg)" pic_ext'

imgre = repile(reg)

imglist = re.findall(imgre,html) return imglist

html = getHtml("")print getImg(html)

我们又创建了getImg()函数,用于在获取的整个页面中筛选需要的图片连接。re模块主要包含了正则表达式

repile() 可以把正则表达式编译成一个正则表达式对象.

re.findall() 方法读取html 中包含 imgre(正则表达式)的数据。

运行脚本将得到整个页面中包含图片的URL地址。

三,将页面筛选的数据保存到本地

把筛选的图片地址通过for循环遍历并保存到本地,代码如下:

#coding=utf-8import urllibimport redef getHtml(url):

page = urllib.urlopen(url)

html = page.read() return htmldef getImg(html):

reg = r'src="(.+?\.jpg)" pic_ext'

imgre = repile(reg)

imglist = re.findall(imgre,html)

x = 0 for imgurl in imglist:

urllib.urlretrieve(imgurl,'%s.jpg' % x)

x+=1html = getHtml("")print getImg(html)

这里的核心是用到了urllib.urlretrieve()方法,直接将远程数据下载到本地。

通过一个for循环对获取的图片连接进行遍历,为了使图片的文件名看上去更规范,对其进行重命名,命名规则通过x变量加1。保存的位置默认为程序的存放目录。

程序运行完成,将在目录下看到下载到本地的文件。

更多推荐

利用python进行爬虫

本文发布于:2024-02-06 10:18:52,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1748124.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:爬虫   python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!