python爬虫(一)

安装完python开发环境肯定迫不及待想撸一发python代码。那我们就从爬虫开始吧!

我们可以先通过python 来实现这样一个简单的爬虫功能,把我们想要的网上的图片爬取到本地。下面我们就一起使用python来实现这样一个功能。

1.先获取整个页面的信息

import urllib.request

def getHtml(url):
page = urllib.request.urlopen(url).read()
page = page.decode('UTF-8')#设置编码格式,网页中有中文的话就会出现乱码
return page

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

print (html)

urllib.request模块提供了web页面读取数据的接口,urlopen方法打开一个网址,然后再用read()读取数据,就得到了网页的源代码,注意这里的网址必须加上http://,平常我们通过浏览器输入网址,浏览器会自动帮我们加上协议头,但是自己写代码实现就得自己规定好协议头。如果要爬取的网页有中文,还要设置读取内容的编码格式。最后你就能看到爬取的页面信息了。

当然这不是我们想要的数据,接着我们就要筛选数据了。
2.筛选需要的数据

筛选数据一般用正则表达式,python提供了非常强大的正则表达式,我们后面会讲到,这里先简单用一下。

这里我找的是百度贴吧,美图吧随便挑的一个帖子当例子,来爬取上面的内容。帖子的地址是https://tieba.baidu.com/p/5207790512

我用的是谷歌浏览器,所以这里面就以谷歌浏览器为例。先打开页面,鼠标单击右键,能看到如下图的界面
审查图片

点击检查,就能看到如下的样子检查元素

通过检查元素我们找到了图片的地址,格式类似于:

修改我们的简单代码,如下

import urllib.request
import re

def getHtml(url):
page = urllib.request.urlopen(url).read()
page = page.decode('UTF-8')
return page

def getImg(page):
imglist = re.findall(r'<img class="BDE_Image" src="(.+?)" size',page)
return imglist

html = getHtml("https://tieba.baidu.com/p/5207790512")
print (getImg(html))

re模块就是python给我们提供的正则表达式包

re.findall()第一个参数是正则表达式对象,第二个参数是目标字符串,也就是我们取到的网页源代码

运行这串代码,讲打印出整个页面中包含图片的URL地址运行结果如下:img5.png

3.把找到的图片保存到本地
代码如下

import urllib.request
import re

def getHtml(url):
page = urllib.request.urlopen(url).read()
page = page.decode('UTF-8')
return page

def getImg(page):
imglist = re.findall(r'<img class="BDE_Image" src="(.+?)" size',page)
x=0
for imgurl in imglist:
f = open("%s.jpg"%x,'wb')
f.write(urllib.request.urlopen(imgurl).read())
print("正在保存图片%s.jpg"%x)
f.close()
x+=1

html = getHtml("https://tieba.baidu.com/p/5207790512")
getImg(html)

用for循环遍历刚才我们找到的图片地址,然后再一次调用urlopen就得到了图片,注意,这里的写入是wb模式,也就是二进制写入,因为是图片,和我们平常文本写入不太一样!

执行上面那串代码的结果如下:
img6.png

我们就可以欣赏我们工作成果了!!!

标签: none

添加新评论