领导喜欢画画,想把今日头条上的画下载下来临摹,于是这个任务交给了我。作为一名初学者,也不能一张一张的下载吧!那就太Low,于是就有了这个小爬虫! ----------------------------------------------------------------------- 奋战了5天,多亏了有百度这个大学校,连抄带蒙总算完成了。下面把这个经历记录下来,以免以后再踩坑。不足之处请大佬指正! ----------------------------------------------------------------------- 废话不说,我们开始。 ----------------------------------------------------------------------- 网址是通过微信给我转发过来的:https://www.toutiao.com/a6610895406425440775/?tt_from=weixin&utm_campaign=client_share&wxshare_count=1×tamp=1542006829&app=news_article_lite&utm_source=weixin&iid=50170635121&utm_medium=toutiao_android&group_id=6610895406425440775 ----------------------------------------------------------------------- 是不是很长? 我是小白一点也看不懂啊! 没关系,我们一点点的试,................时间过去了十分钟 你说不知道怎么试? 从最短的开始:
https://www.toutiao.com/a6610895406425440775/ 可以正常打开。就是它了。后面的什么意思我们不管。 有了网址我们就可以开始了。 ------------------------------------------------------------------------- 这里我用的是requests模块,据说是最好用的(实际上也确实适合我们这种小白)
import requests s= requests.get('https://www.toutiao.com/a6610895406425440775/') print(s.text)
我去!居然什么都没有!怎么办?
百度啊!..........................30分钟过去了。看了N多内容。
找到了,原来是request的时候还携带着cookie,这不是坑我们小白吗?做个网站还弄这么复杂,还让不让小白好好的玩耍了!
s = requests.session()
这个可以跨请求保持一些cookie
headers = {'User-Agent': 'Chrome/63.0.3239.132'} req = s.get(url, headers=headers)
据说加上headers可以让网站认为我们是用浏览器在浏览网页,不是一个爬虫。(好吧,我们还是这样做吧!)
print(s.text)
我去来了一堆报错
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)
怎么办?
百度啊!
N分钟过去了,找到了,我改还不行吗!
加了verify=False
import requests url = 'https://www.toutiao.com/a6610895406425440775/' s = requests.session() headers = {'User-Agent': 'Chrome/63.0.3239.132'} req = s.get(url, headers=headers, verify=False) print(req.text)
还是有报错,但是内容我们是获取到了。不容易啊!这得死多少的脑细胞啊!
下面就关键的来了,如何获取图片呢?
1、打开浏览器(这里我用的是360极速浏览器)
2、打开要下载图片的页面
3、F12 打开弄好者选项
4、点一下这里,然后挪到一张图片上
5、是不是看到一个网址?
6、这就是我们要找的网址,复制出来。什么你说你不会复制,没关系。经过N长时间的摸索我学会了。教给你。
鼠标放在网址上右键,点copy link address,复制到记事本上。这就是我们要找的网址
7、现在只找到 一个图片,那其它的图片在哪里呢?
别急,我们在看上一张图。是不是这个网址在div这个标签里,下面还有很多的div标签,让我数一数,刚好是图片 的个数。我们一个一个的点开,原来都在这里啊!
把图片网址都复制到记事本里。
8.打开网页的源码。什么这也不会。不要紧,很简单。
在网页上鼠标右键,查看源代码。是不是弹出一堆的代码!
我的天啊!这都是什么啊?密密麻麻的,这不是为难小白吗?
放弃吗?放弃吗?放弃吗?
不! 这不是我的作风!
其实呢,不需要懂,flowe me!
在源代码页,鼠标右键点击,查找,把刚才复制到记事本的网址复制到查找框里,是不是有了?
(这里为什么会看源代码呢?是因为我们在上面print(req.text)得到的内容就是源代码,这样看起来方便一点)
9.那么怎么把这个网址取到呢?
百度吧,谁让咱是小白呢!
.....................................半天过去了。
终于决定用正则。
...........................学习正则中
10、学习正则完毕
我们写代码吧!
s = requests.session() headers = {'User-Agent': 'Chrome/63.0.3239.132'} req = s.get(url1, headers=headers, verify=False) bs = BeautifulSoup(req.text, 'lxml') p = re.compile(r'img src="(.*?)"') lst = p.findall(req.text) print(lst)
正确,这就是我们需要的。
11.有了网址,可是怎么才能把图片保存下来呢?
其实说穿了很简单,你只需要把网址request过去,网站返回的数据就是图片。我们直接把它写入文件就行了。
上代码:
res = requests.get(img_lst) with open(str(time.time()) + '.jpg', 'wb') as f: # time.time()的意思是以时间为文件名保存 f.write(res.content) #保存图片 time.sleep(0.1) # 暂停0.1秒,免得电脑保存图片太快,后一张把前一张覆盖掉
好了我们运行一下,在源代码的文件夹里是不是多了一堆的图片啊?
恭喜!恭喜!恭喜!
下面是完整的代码
import requests import re import time def pa_one(url1): """获取网页直接显示的图片""" s = requests.session() headers = {'User-Agent': 'Chrome/63.0.3239.132'} req = s.get(url1, headers=headers, verify=False) p = re.compile(r'img src="(.*?)"') lst = p.findall(req.text) for img_lst in lst: res = requests.get(img_lst) with open(str(time.time()) + '.jpg', 'wb') as f: f.write(res.content) time.sleep(0.1) if __name__ == '__main__': url1 = 'http://p3.pstatp.com/large/pgc-image/1525483344883e65d88252a' pa_one(url1)
-----------------------------------------------
通过这个爬虫我感觉自己的基础真是太差了,准备重新再学一次基础知识!html,js等等!
学无止境啊!
还有就是要善用百度!
-----------------------------------------------
第一次写这么长的文章,好累啊!
-----------------------------------------------
下一次写下一爬取今日头条图片时遇到的另一个坑!