美文网首页数据分析专栏
python爬虫:用request最简单的代码爬取图片,以及Xp

python爬虫:用request最简单的代码爬取图片,以及Xp

作者: Viva_Stephen | 来源:发表于2019-06-25 13:05 被阅读72次

    最近这段时间自己一直在学习数据分析这一块,其中关于数据收集方面就可以用到爬虫。那么自己也想把最近所学的一些知识分享给大家。

    爬虫的方式有很多种,我觉得比较方便的selenium和request,这篇文章介绍request的方式,末尾附上代码。

    首先来看爬取图片的布骤:
    1、抓取网页url
    2、找到自己想要爬取的内容,并解析内容(这里是所有布骤最难的)
    3、保存图片包括(文件夹的路径,图片名称)
    4、翻页爬取
    学会以上的基本布骤基本上是OK啦,有些高手还会加入判断,或者多线程运行等等,哎算了。。。

    对了在开始之前,需要引入包,这里我们会用到request抓取包,os路径保存包,etree解析包

    import os
    import requests
    from lxml import etree
    

    然后开始我们的爬取,这里我们用果壳网的在行来实验。
    这个网站:


    微信截图_20190625120429.png

    最终的结果是图片和人名,这样子


    微信图片_20190625121238.png

    打个码,

    网址是这个:

    [https://www.zaih.com/falcon/mentors?first_tag_id=342&first_tag_name=%E4%BA%92%E8%81%94%E7%BD%91%2B&second_tag_id=374&second_tag_name=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&page=7](https://www.zaih.com/falcon/mentors?first_tag_id=342&first_tag_name=%E4%BA%92%E8%81%94%E7%BD%91%2B&second_tag_id=374&second_tag_name=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&page=1)
    
    

    一、爬取网页的主要代码

    pic_hxml=requests.get(url,headers=headers)
    

    url是网页的网址
    headers是头部,在网页爬取中,很多网站会有反爬的设施,而头部一般来说是一个身份验证一样的代码,模拟人的操作。一般来说头部用User-Agent的代码,这个因个人电脑而异。

    headers={
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
    }
    

    二、解析与找寻内容
    我们用etree来解析网页,大家可看到。

    html=etree.HTML(pic_hxml.text)
        pic1="//section[@class='flex']/img[@class='mentor-card__avatar']/@src"
        name1="//div[@class='flex align-center wrapper']/span[@class='mentor-card__name']/text()"
        pic2=html.xpath(pic1)
        name2=html.xpath(name1)
    

    其中最难的就是 pic1和name1的寻找了,我在这里是用工具帮忙的利用谷歌浏览器,安装“Xpath Helper”插件。


    工具.png

    a.安装好后点击插件,你可看到弹出两个小框框
    b.按住shift+ctrl,鼠标移动到哪,就需要提取的代码了。
    c.适当缩短内容,达到遍历整个网页。


    xpath_heper使用.png

    我们要的结果是这个:


    结果.png

    然后按同样的方式提取名字,注意文字后要加"/text()"才能显示。
    最后用name2=html.xpath(name1),就完成了提取。

    三、保存文件

    1、设置文件路径,文件名和图片的url

    用for循环解封name和pic

        for name,pic in zip(name2,pic2):
            imgurl=pic#这是图片的url
            path1=os.path.abspath('D:/Users/17617/PycharmProjects/untitled/爬虫练习库/刘亦菲')#这是文件的报春路径
            img_name=name+'.jpg'#图片的名字。别忘了'.jpg'不然图片没法看
            imgpath=os.path.join(path1,img_name)#将路径与文件名结合
    

    2、保存
    很简单的三行代码,提取图片,打开设置好的“路径名称盒子”,用“wb"表示写入,然后将图片放进去。

     response=requests.get(imgurl)
        with open (imgpath,'wb') as f:
            f.write(response.content)
    

    四、如果你想用循环提取图片,多看几分钟刷刷的快感,这里就需要设置翻页。

    for i in range(1,7,1):
        url='https://www.zaih.com/falcon/mentors?first_tag_id=342&first_tag_name=%E4%BA%92%E8%81%94%E7%BD%91%2B&second_tag_id=374&second_tag_name=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&page='+str(i)
    

    我们这里设置for循环,i
    通常url='www.……'+str(i)
    完成翻页设置,当然不同的网页,翻页的方法也不同,但用心寻找还是可以找到规律的,然后根据规律进行循环。

    那么我的爬虫是按这些布骤写的,利用函数关系将4个布骤进进行连接。
    完整代码:

    import os
    import requests
    from lxml import etree
    
    #保存设置
    def down_load(imgpath,imgurl):
        response=requests.get(imgurl)
        with open (imgpath,'wb') as f:
            f.write(response.content)
            # shutil.copyfileobj(response.raw,f)
            f.close()
    
    headers={
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
    }
    
    #提取内容
    def pic_url(url,headers):
        pic_hxml=requests.get(url,headers=headers)
        html=etree.HTML(pic_hxml.text)
        pic1="//section[@class='flex']/img[@class='mentor-card__avatar']/@src"
        name1="//div[@class='flex align-center wrapper']/span[@class='mentor-card__name']/text()"
        pic2=html.xpath(pic1)
        name2=html.xpath(name1)
        for name,pic in zip(name2,pic2):
            imgurl=pic
            path1=os.path.abspath('D:/Users/17617/PycharmProjects/untitled/爬虫练习库/刘亦菲')
            img_name=name+'.jpg'#别忘了'.jpg'不然图片没法看
            imgpath=os.path.join(path1,img_name)
            print('正在下载',img_name)
            print('正在下载', imgurl)
            down_load(imgpath,imgurl)
    
    #翻页设置
    for i in range(1,7,1):
        url='https://www.zaih.com/falcon/mentors?first_tag_id=342&first_tag_name=%E4%BA%92%E8%81%94%E7%BD%91%2B&second_tag_id=374&second_tag_name=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&page='+str(i)
        pic_url(url,headers)
    

    希望对还在学习爬虫的朋友能够起到帮助作用,如果你还在学习,最好自己能够尝试一下其他的网站,不断练习试错和总结。

    有什么问题欢迎在下方留言提问。
    本人正在深圳学习数据分析,我的微信是:fxfrom2013
    欢迎加我互相交流,互相学习。

    相关文章

      网友评论

        本文标题:python爬虫:用request最简单的代码爬取图片,以及Xp

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