【实验目的】

1.了解爬虫基础知识

2.练习使用Python爬取贴吧图片

【实验原理】

网络爬虫,即Web Spider,是一个很形象的名字。把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛。网络蜘蛛是通过网页的链接地址来寻找网页的。从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。如果把整个互联网当成一个网站,那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取下来。这样看来,网络爬虫就是一个爬行程序,一个抓取网页的程序。
抓取网页的过程其实和读者平时使用浏览器浏览网页的道理是一样的。比如说在浏览器的地址栏中输入www.baidu.com这个地址。打开网页的过程其实就是浏览器作为一个浏览的“客户端”,向服务器端发送了 一次请求,把服务器端的文件“抓”到本地,再进行解释、展现。HTML是一种标记语言,用标签标记内容并加以解析和区分。浏览器的功能是将获取到的HTML代码进行解析,然后将原始的代码转变成我们直接看到的网站页面。

【实验环境】

Linux Ubuntu 16.04
Python 3.5
PyCharm

【实验内容】

练习使用Python编写代码,爬取贴吧的图片。

【实验步骤】

1.开启Pycharm,选择Create New Project。

1.2 Python爬取贴吧图片 - 图1

2.在Location的默认路径后输入pctieba,点击Create。

1.2 Python爬取贴吧图片 - 图2

3.右键点击pctieba,选择New=>Python File,创建名为pc的python文件。

1.2 Python爬取贴吧图片 - 图3
1.2 Python爬取贴吧图片 - 图4

4.选择我们要爬取的网站。

我们来爬取贴吧的图片,URL为:http://192.168.1.100:40000/tieba
1.2 Python爬取贴吧图片 - 图5
我们的目标是将本页面的所有图片爬取下来,右键单击页面,选择查看网页源码,如下:
1.2 Python爬取贴吧图片 - 图6

5.编写代码来获取该网页源码

  1. #coding=utf-8
  2. import urllib.request
  3. import re
  4. def getHtml(url):
  5. page = urllib.request.urlopen(url)
  6. html = page.read()
  7. return html
  8. html = getHtml("http://192.168.1.100:40000/tieba")
  9. print(html)

在源码中,我们要截取的是jpg格式的图片,格式为:src=”http://192.168.1.100:40000/Static/baidu/0713b31bb051f8197aa4e7c6dbb44aed2f73e7bf.jpg
我们来设计正则表达式来匹配该格式:

  1. reg = "/Static/baidu/[A-Za-z0-9]+.jpg"

6.编写代码来爬取网页上的所有图片,其中compile方法用于将正则字符串编译成正则表达式对象,urlretrieve用于下载制定url内容到本地:

  1. def getImg(html):
  2. html = html.decode('utf-8')
  3. reg = "/Static/baidu/[A-Za-z0-9]+.jpg"
  4. imgre = re.compile(reg)
  5. imglist = re.findall(imgre,html)
  6. x = 0
  7. for imgurl in imglist:
  8. imgurl='http://192.168.1.100:40000'+imgone;
  9. urllib.request.urlretrieve(imgurl,'%s.jpg' % x)
  10. x+=1
  11. print('Getting the %s picture' % x)
  12. getImg(html)

7.完整代码为:

  1. #coding=utf-8
  2. import urllib.request
  3. import re
  4. def getHtml(url):
  5. page = urllib.request.urlopen(url)
  6. html = page.read()
  7. return html
  8. def getImg(html):
  9. html = html.decode('utf-8')
  10. reg = "/Static/baidu/[A-Za-z0-9]+.jpg"
  11. imgre = re.compile(reg)
  12. imglist = re.findall(imgre,html)
  13. x = 0
  14. for imgone in imglist:
  15. imgurl='http://192.168.1.100:40000'+imgone;
  16. urllib.request.urlretrieve(imgurl,'%s.jpg' % x)
  17. x+=1
  18. print('Getting the %s picture' % x)
  19. html = getHtml("http://192.168.1.100:40000/tieba")
  20. getImg(html)

8.在PyCharm页面单机右键选择Run ‘pc’运行代码,运行结束,本页面共爬取了26张图片。

1.2 Python爬取贴吧图片 - 图7

9.打开本地文件夹/home/zhangyu/PycharmProjects/pctieba来查看我们爬取的图片

1.2 Python爬取贴吧图片 - 图8
至此,实验就已经结束!