Python爬虫学习

来源:互联网 发布:c语言进阶书籍 编辑:程序博客网 时间:2024/04/20 06:50
  好长时间没有登录自己的这个博客,看了一下自己的文章还是去年的,发现自己这一年自己学的东西大部分都写在了自己的有道云里面,没有分享出来,大概也是因为自己最近这一年没有接触到什么新的东西。这次回来是想将自己最近因工作需要学习Python的历程记录下来。同时,也将自己经验介绍给后来人,少走弯路^_^  今天,自己在家闲的无聊,写了个Python的爬虫小程序。先将这个分享出来,稍后我将分享Python的一些基础东西。  爬虫,在自己没有接触前一直以为是一个很牛逼高大上的技术活。其实,这个说的是聚焦爬虫,这里我就不讲了大家自行百度,这里百度一下不会die。对于通用爬虫,因为你只要给定URL,它关键技术只在正则表达式的研究上,因为你想爬别人的东西,别人稍稍把网页上的你想爬的东西结构一改你的爬虫就失灵了,所以你得跟着改你的正则规则,这样才能匹配上才能爬下别人的东西。   说了这么多,下面贴上Python爬虫的脚本:

1、获取页面

def getHtml(url):    #创建一个表示远程url的类文件对象,然后像本地文件一样操作这个类文件对象来获取远程数据。    page = urllib.urlopen(url)    #根据urlopen(),返回的对象获取页面信息    html = page.read()    return html

获取指定网页源代码:
获取指定网页源代码
2、获取页面图片URL

def getImg(html):    #图片的正则表达式    reg = r'src="(.+?\.jpg)" pic_ext'    #Python提供的正则表达式匹配方法    imgre = re.compile(reg)    imglist = re.findall(imgre,html)    x = 0    for imgurl in imglist:        # urllib.urlretrieve(imgurl,'%s.jpg' % x) #将文件下载到本地(根目录)        save_file('%s.jpg' % x, imgurl)        x+=1

3、将图片保存至指定文件目录

def save_file(filename, img_url):    img = requests.get(img_url)    name = str("D:\py-workspace\picture"+"/"+filename)    with open(name, "wb") as file:        file.write(img.content)

4、调用

html = getHtml("http://tieba.baidu.com/p/2460150866")getImg(html)

爬取的图片:
爬取的图片
方法讲解:
1、urlopen()方法:
urllib.urlopen(url[, data[, proxies]]) :创建一个表示远程url的类文件对象,然后像本地文件一样操作这个类文件对象来获取远程数据。
参数url表示远程数据的路径,一般是网址;
参数data表示以post方式提交到url的数据;
参数proxies用于设置代理。
urlopen返回 一个类文件对象,它提供了如下方法:
read() , readline() , readlines() , fileno() , close() :这些方法的使用方式与文件对象完全一样;
info():返回一个httplib.HTTPMessage 对象,表示远程服务器返回的头信息
getcode():返回Http状态码。如果是http请求,200表示请求成功完成;404表示网址未找到;
geturl():返回请求的url。
2、urlretrieve()方法:(代码中我将这个方法直接注释掉了,这里我们直接再进一步保存到指定文件夹)
urllib.urlretrieve(url[, filename[, reporthook[, data]]])
参数说明:
url:外部或者本地url;
filename:指定了保存到本地的路径(如果未指定该参数,urllib会生成一个临时文件来保存数据);
reporthook:是一个回调函数,当连接上服务器、以及相应的数据块传输完毕的时候会触发该回调。我们可以利用这个回调函数来显示当前的下载进度。
data:指post到服务器的数据。该方法返回一个包含两个元素的元组(filename, headers),filename表示保存到本地的路径,header表示服务器的响应头。
3、open()方法:
open(file_name [, access_mode][, buffering])
各个参数的细节如下:
file_name:file_name变量是一个包含了你要访问的文件名称的字符串值;
access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r),这里我们用的是’wb’
buffering:如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。
4、 write()方法
write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。
write()方法不会在字符串的结尾添加换行符(‘\n’)。

1 0
原创粉丝点击