[python学习日志]网络爬虫实战

记录学习python中碰到的问题,以便以后看,以及分享给可能会有同样问题的小白,一起交流进步。

从开始学python以来到现在有十多天了,终于可以写出爬取网络图片的爬虫,不过只是小规模的,但是已经很开心了,毕竟这只是开始嘛。第一次看python教学视频是2017年12月24号中午。看的是小甲鱼的视频。然后我是真正零基础学习,一个月前想学编程,是从C++视频开始看起的,但是C++有很多规则,要写出一个程序不容易,从这里入门有一定难度,120集的视频我只看了50集,而且没有做题,只是有写十几行代码而已。好了这就是我学python前的基础。

这里先说一下,大多数网站可能会采用动态加载,所以不那么容易爬,这里我选一个静态加载的先。

高清壁纸网站:http://desk.zol.com.cn/fengjing/,静态加载。先看审查元素,不得不说这是每一个爬虫的开始,因为要知道从哪里下载地址。

[python学习日志]网络爬虫实战_第1张图片

接着就用requests库获取html。

import requests

headers={'user-agent':'Mozilla/5.0'}         #伪装一下别被认出来
url='http://desk.zol.com.cn/fengjing/3.html'
response = requests.get(url,headers=headers)
    print(response.status_code)              #确定成功访问网页
    rules = re.compile(r'"(http.*?\.jpg)"')  #正则表达式获取图片地址
    img_addrs = rules.findall(response.text) #将获得的response对象转换成str,便于筛选想要的

获得之后开始上正则表达式啦,这里我正则因为不熟悉,所以这个表达式可能只能针对这个网页行,我直接获取带有http开头以及带有.jpg结尾的链接,然后打印出来,检查一下是否是地址。(这里要试很多遍,我直接把结果放出来)

[python学习日志]网络爬虫实战_第2张图片

打印结果是都是地址,那就说明成功啦!暗自开心,我不会告诉你这个时候我跳了起来,毕竟是第一次,比较激动。等会儿,这些地址能用吗,让我们来试试,在浏览器打开。[python学习日志]网络爬虫实战_第3张图片

看来成功了,很开心。图片小了点?没关系,第一次只求成功,毕竟有了第一次,以后想下载啥不行。

那编写代码来保存文件,问题又来了,以前从没有成功过,都不知道怎么保存文件,没事,CSDN论坛各种帖子看,最后发现很简单,就普通的写入文件。

img = requests.get(url,headers=headers)             #用requests的get方法访问图片
with open(r'd:\python3\img\%d.jpg'%i[0],'wb') as f: #打开一个文件,名字后缀JPG,文件名随便
	f.write(img.content)			    #用write方法写入,注意这里用二进制写入	            						    


然后写个循环,把每张图片保存下来。这个要会啊,不会的话还是先把基本语法学完吧,因为我当初就是心急,浮躁,基础没打好就开始搞,然后问题一个接着一个来啊。心态真的崩完了,因为作为一个真正的小白,你是不知道html,标签,库的返回对象是什么(因为这个把我心态搞崩好几次有时候),在网上看的教程有的用BeautifulSoup,有的正则,有的结合起来用。所以基础没打好真的是很累的。然后有的用requests,有的用urllib里面的request。有时候你想两篇文章结合起来看,发现两个人用的库不一样,又无法很好地结合。

好最后整个代码:(有点乱见谅)

import re
import requests

headers={'user-agent':'Mozilla/5.0'}
url='http://desk.zol.com.cn/fengjing/3.html'

#用循环把图片存下来
def save_img(img_addrs):
    for each in img_addrs:
        img = requests.get(each,headers=headers)
        with open(r'd:\python3\img\%d.jpg'%i[0],'wb') as f:
            f.write(img.content)
        i[0] +=1                #每存一张图文件名序号加一
    
#获得html页面图片的地址
def get_img_addr(url):
    response = requests.get(url,headers=headers) 
    print(response.status_code)
    rules = re.compile(r'"(http.*?\.jpg)"')      
    img_addrs = rules.findall(response.text)
    for each in img_addrs:
        print(each)
    return img_addrs

#主函数
if __name__ == '__main__':
    
    i = [0]             #创建一个列表,用于文件的命名
    i[0]=0              #当然你也可以用别的命名方法
    addr = get_img_addr(url)
    save_img(addr)

最后保存的结果。[python学习日志]网络爬虫实战_第4张图片

好啦,一起继续学习,大家加油。



你可能感兴趣的:(学习日志,python,爬虫,requests库,正则表达式,学习日志)