从零开始的爬虫(一)贴吧图片

之所以说从零开始,因为我也是从零开始学的orz

这些是爬虫学习过程的详细记录。

最开始想要做的是图片爬虫。

在网上搜集教程后找到https://www.cnblogs.com/Axi8/p/5757270.html

是从零开始的好教程。

接下来是对这个教程进行实践的操作。

一。简单读取页面源码的爬虫。

大概步骤有三:发送请求打开网页;读取页面源码;在控制台输出。

打开网页在python3中用到的是urllib.request.urlopen函数,调用时需要引入urllib.request包

代码如下。

import urllib.request

page = urllib.request.urlopen('http://tieba.baidu.com/p/6185807142')#打开网页
htmlcode = page.read()#读取页面源码
print(htmlcode)#在控制台输出

之后做其他网页的图片爬虫时,也是首先需要发送请求打开网页,再返回源码。

所以可以将其封装为函数:

def get_html(url):
     page = urllib.request.urlopen(url)
     html = page.read()
     return html

输入网址,返回源码。

二。下载该页面所有图片的爬虫。

在目标网页中右键查看源码,找到目标图片的相关地址为

<img class="BDE_Image" src="https://imgsa.baidu.com/forum/w%3D580/sign=122236c7c6fcc3ceb4c0c93ba244d6b7/c3409a8fa0ec08fa040fa94257ee3d6d54fbda8f.jpg" size="141658" changedsize="true" width="560" height="405" size="141658">

查的图片嘛,按ctrl + f输入.jpg一个个翻就好了。

 

我们需要在源网页中提取目标图片的代码,

可以使用正则表达式进行匹配提取。

正则表达式教程在https://www.runoob.com/regexp/regexp-syntax.html

调用时需要引入 re 包。

 

对于我们要提取的图片地址,找出其区别于其他地址的特征:前面有 src=" ,后面有 " size= ,以.jpg结尾。

由此写出正则表达式

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

括号中的内容指定返回的字符串。

写好正则后需要使用re.complie编译字符串为对象,

然后使用.findall函数找出所有匹配该表达式的对象,

就是我们需要的图片链接了。

 

可以将匹配到的对象全部打印出来,用来查看正则表达式是否正确,是否匹配到了指定目标。

代码如下。

import urllib.request
import re

def get_html(url):
    page = urllib.request.urlopen(url)
    html = page.read()
    return html

reg = r'src="(.+?\.jpg)" size' #正则表达式
reg_img = re.compile(reg) #编译字符串为对象,用于匹配查找
htmll = get_html('https://tieba.baidu.com/p/6185807142')#读取源码
imglist = reg_img.findall(htmll.decode('utf-8'))#找出所有匹配的对象

for img in imglist:
    print(img)#查看是否成功匹配到目标

需要注意的是,保存的源码htmll如果不进行转码处理会出现转码错误。

最终输出的是目标图片的地址。

 

拿到地址后,可以用urllib.request.urlretrieve(url,path)下载图片地址到指定本地目录。

输入的第一个变量是图片地址,第二个是本地目录地址。

引入变量x指定图片文件名。

最终代码如下。

import urllib.request
import re

def get_html(url):
    page = urllib.request.urlopen(url)
    html = page.read()
    return html
reg = r'src="(.+?\.jpg)" size' #正则表达式
reg_img = re.compile(reg) #编译字符串为对象,用于匹配查找
htmll = get_html('https://tieba.baidu.com/p/6185807142')
imglist = reg_img.findall(htmll.decode('utf-8'))#找出所有匹配的对象
x = 0
for img in imglist:
    # print (img) #查看是否成功匹配到目标
    urllib.request.urlretrieve(img,'E:\\bigdata\pachong\%s.jpg' %x)
    x += 1

运行后即可在指定的文件夹下看到爬取的图片了。

第一次发文。。如有差错请多指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值