美文网首页
python小白爬虫第一篇

python小白爬虫第一篇

作者: 黑白不过灰 | 来源:发表于2019-08-08 10:10 被阅读0次

    由于公司大佬都去实地部署项目了,所以作为前端切图仔的我,是不用过去滴

    嘻嘻嘻

    进入今天的正题,python作为当下最热的语言,所以来蹭蹭热度,首先先从爬虫入手了。刚好是七夕前后,作为木有女朋友的前端仔,只能花花时间去爬点资源了,于是我对https://www.mzitu.com伸出了“ 猿手 ”

    准备工作

    python3.6安装好,本人用的是window(如果是使用linux的大佬也不会看我的文章了,哈哈哈)

    requests库-----》一个python派发请求之类的库(个人理解)----》可以使用pip install requests安装

    BeautifulSoup-------》一个处理xml、html之类标签的库,挺好用的,谁用谁知道---》安装同上流程

    编辑器的话,看个人吧,本人是前端开发,所以直接使用vscode了

    ok,一切准备就绪,准备发车

    秋名山车神发车了

    第一步

    先打开网站,看看网页源码,看看网页结构(兄弟hold住,你是来爬资源的,不是来看美女的)
    好的,我们打开源码(鼠标右键,查看源码),然后你会发现


    页面源代码

    你可以看到,你要爬的图片就是在这些链接里
    然后,打开你的编辑器,开始撸代码,下面这些代码就不用解释了吧,都又注释

    import requests
    from bs4 import BeautifulSoup
    
    # 定义请求头,防止被识别为爬虫
    headers = {
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
      "Referer": "https://www.mzitu.com/"
    }
    # 定义爬取的网站域名
    all_url = "https://www.mzitu.com/"
    
    # 派发请求,返回响应的html
    start_html = requests.get(all_url,headers=headers)
    
    # 使用beautifulSoup处理html的字符串
    Soup = BeautifulSoup(start_html.text,'lxml')
    
    # 打印获取回来的标签
    print(Soup)
    

    运行之后,命令行就打印东西了,让我来看一哈


    运行结果

    然后你就发现:哇,和刚刚查看的源代码一模一样耶!!!!!


    这么神奇吗?
    看官别急,我们来进行下一步的操作,下一步完成之后,你距离你的小姐姐又近了一步。刚刚我们通过请求返回了整个网页的源码,但是我们并不是全部都需要,我们只要截取我们需要的就好了,这个时候就是beautifulSoup出场的机会了
    import requests
    from bs4 import BeautifulSoup
    # 定义请求头,防止被识别为爬虫
    headers = {
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
      "Referer": "https://www.mzitu.com/"
    }
    # 定义爬取的网站域名
    all_url = "https://www.mzitu.com/"
    # 派发请求,返回响应的html
    start_html = requests.get(all_url,headers=headers)
    # 使用beautifulSoup处理html的字符串
    Soup = BeautifulSoup(start_html.text,'lxml')
    # 打印获取回来的标签
    # print(Soup)
    # 该api是查找ul的id为pins的标签,然后再找其下面的a标签
    all_a = Soup.find('ul',id='pins').find_all('a')
    # 循环遍历a标签的集合
    for a in all_a:
      # 打印a标签
      print(a)
    

    打印出来的就是通过筛选的a标签了,你要知道a标签里面可是包含有好多小姐姐嘞,到这里是不是动力十足了呢


    小姐姐的集合

    但是还不够,我们要拿的是图片url呀,然后你就想,这个简单,我直接用正则匹配出来不就好了吗?嘻嘻嘻,其实有更简单的方法

    # 在循环中打印一下
    print(a['href'])
    

    就能把a标签中的url打印出来了,下面我们加大力度,不然篇幅过长我就会被各位打的,在循环中再次请求url,会返回html页面源码,我们是筛选出其中的一个标签


    循环中再次请求

    你看页面你就知道的,你要爬的是大的图片,不可能爬一张小图片吧,所以我们筛选返回的html中div的class为main-image下的img中的src,拿到url之后,就是下载图片了

     resp = requests.get(a['href'], headers=headers)
        trueHtml = BeautifulSoup(resp.text, 'lxml')
        # 筛选url
        url = trueHtml.find('div', class_="main-image").find('img')['src']
        # 请求
        result = requests.get(url, headers=headers)
        # 文件的写入的路径
        with open("H:\\python\\001\\img\\"+a.get_text()+".jpg", "wb") as f:
            # 写入内容
            f.write(result.content)
            # 关闭文件
            f.close()
    

    然后你就发现你的文件夹里面多了一些小姐姐的图片


    嘻嘻嘻

    然后你会发现,咋这么少呀,就不能多爬点,我告诉你,没问题,下面我们就来多爬点。
    添加循环,该循环控制的是翻页,所以,你懂的


    你懂我意思吧
    话不多bb,直接上代码
    import requests
    from bs4 import BeautifulSoup
    
    # 定义请求头,防止被识别为爬虫
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
        "Referer": "https://www.mzitu.com/"
    }
    # 定义爬取的网站域名
    all_url = "https://www.mzitu.com/"
    # 控制翻页
    for i in range(1, 2):
        start_html = requests.get(all_url+"/page/" + str(i) + "/", headers=headers)
        # 使用beautifulSoup处理html的字符串
        Soup = BeautifulSoup(start_html.text, 'lxml')
        # 该api是查找ul的id为pins的标签,然后再找其下面的a标签
        all_a = Soup.find('ul', id='pins').find_all('a')
        all_a = list(set(all_a['href']))
        # 循环遍历a标签的集合
        for a in all_a:
                resp = requests.get(a,headers=headers)
                trueHtml = BeautifulSoup(resp.text, 'lxml')
                # 筛选url
                url = trueHtml.find('div', class_="main-image").find('img')['src']
                # 请求
                result = requests.get(url, headers=headers)
                # 文件的写入的路径
                with open("H:\\python\\001\\img\\"+a.get_text()+".jpg", "wb") as f:
                    # 写入内容
                    f.write(result.content)
                    # 关闭文件
                    f.close()
    

    ok。到这里基本的请求你就搞定了,小姐姐也住到了你的“豪宅”(盘)里。可能你一次性爬太多的时候会报错,这是正常的,嘻嘻嘻,这只是单线程的爬虫,并没有错误处理啥的,而且使用的是你自己的ip,并没有做ip的动态代理。这个文章暂时先这样


    溜了溜了

    相关文章

      网友评论

          本文标题:python小白爬虫第一篇

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