小白学爬虫——爬取今日头条里的图片(一)

领导喜欢画画,想把今日头条上的画下载下来临摹,于是这个任务交给了我。作为一名初学者,也不能一张一张的下载吧!那就太Low,于是就有了这个小爬虫!
-----------------------------------------------------------------------
奋战了5天,多亏了有百度这个大学校,连抄带蒙总算完成了。下面把这个经历记录下来,以免以后再踩坑。不足之处请大佬指正!
-----------------------------------------------------------------------
废话不说,我们开始。
-----------------------------------------------------------------------
网址是通过微信给我转发过来的:https://www.toutiao.com/a6610895406425440775/?tt_from=weixin&utm_campaign=client_share&wxshare_count=1&timestamp=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等等!

学无止境啊!

还有就是要善用百度!

-----------------------------------------------

第一次写这么长的文章,好累啊!

-----------------------------------------------

下一次写下一爬取今日头条图片时遇到的另一个坑!

猜你喜欢

转载自blog.csdn.net/daxia5398/article/details/84106828