之所以说从零开始,因为我也是从零开始学的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
运行后即可在指定的文件夹下看到爬取的图片了。
第一次发文。。如有差错请多指正!