美文网首页
爬取糗事百科上的图片

爬取糗事百科上的图片

作者: 流年碎影ABC | 来源:发表于2019-07-06 19:57 被阅读0次

    先上结果



    一共爬取了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的爬取结果,该显示中文就是中文。所以不用纠结这个问题了。另外这件事情给我的另一个启示是要多看官方文档。

    相关文章

      网友评论

          本文标题:爬取糗事百科上的图片

          本文链接:https://www.haomeiwen.com/subject/azsmhctx.html