爬取糗事百科上的图片

先上结果



一共爬取了700张图片,历时半分钟。

爬虫的思路往往如下:
发送请求->取得页面->解析页面->存储

这里直接上源代码,然后解释下其中我觉得很重要的地方:

import requests
from lxml import etree

def get_HTML(url):
    headers = {"User-Agent": 
                "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
              }
    try:
        r = requests.get(url,headers=headers,timeout=30)
        r.raise_for_status
        r.encoding = "utf-8"
        return r.text
    except:
        return
    
def made_url(url):
    return "http:"+ url

k = 0  #k用来个图片按顺序命名的
for i in range(1,36):      #总共爬取35页,每页20张图片,一共700张
    URL = "https://www.qiushibaike.com/pic/page/%d/?s=5208036"%i
    html = etree.HTML(get_HTML(URL))
    hrefs = html.xpath('//div[@class="thumb"]/a/img/@src')  #得到所有图片地址
    url_list = list(map(made_url,hrefs))    #生成标准url
    n = len(url_list)
   
    #保存图片
    for i in range(n):             #存储图片
        with open("糗事百科_all_pics/%d.jpg"%(k+i),"wb") as f:
            r = requests.get(url_list[i])
            f.write(r.content)
            f.close
    k = k + n

print(k)

其中get_HTML() 这个函数是用来发送请求,并用来取得页面的,而made_url() 这个函数是给得到结果前面加一个"http":,这样才能生成一个完整的url链接
这个小程序当中,有几个地方要注意下:

  • 1.map函数,它是python内置的函数,它的用法如下

map(f,list)

它的作用能就是将函数f作用在list中的每一个元素,并生成一个列表。很简洁很有效的一个小函数。

    1. 我之前写完html = etree.HTML(r.text)后,总会写一句

print(etree.tostring(html))

来看下是不是得到我想要的结果,结果每次对于中文的网站,会出现诸如“&#”这样貌似乱码的东西,这个问题一直困扰着我,查来很多的资料,也没有解决这个问题。一次偶然的机会,我在一个excel群里问这个关于爬虫的问题(是的excel群),然后有人跟我说这是网页自己原来的编码,即使tosting()显示的结果是乱码格式,也不影响xpath的爬取结果,该显示中文就是中文。所以不用纠结这个问题了。另外这件事情给我的另一个启示是要多看官方文档。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容