学Python不开车 发表于 2020-2-27 13:42:26

爬取妹子图 三部曲

本帖最后由 学Python不开车 于 2020-3-11 14:30 编辑

从小甲鱼的ooxx过来的,由于正则表达式过于困难,所有使用了BeautifulSoup
爬取网址 https://www.mzitu.com/总共做了三步
分别是1、爬取第一页封面 2、爬取所有页封面 3、爬取所有页所有图片
安装模块 打开命令提示簿 pip install + 模块名如 pip install requests
这里的lxml 可以不用可以把下面的 lxml 改成 html.parser
最后一步我加了 import time为了防止爬取过快 被制裁
模块化这一块欠缺太多 大家凑合着看
代码如下
#爬取第一页所有图集的封面
import requests
from bs4 import BeautifulSoup
import lxml
import os

url = 'https://www.mzitu.com'
headers ={'Referer':'https://www.mzitu.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/6.1.2107.204 Safari/537.36'}
# 打开网页 解析成BeautifulSoup对象
def url_open(url):
      res = requests.get(url,headers=headers)
      html = res.text
      soup = BeautifulSoup(html,'lxml')
      return soup
#找到图集封面的网址 生成一个列表
def img_href(url):
      all_href = []
      href = url_open(url).find('div',class_='postlist').find_all('img',class_='lazy')
      for i in href:
                all_href.append(i['data-original'])
      return all_href
# 保存 图片               
def save_img(folder,all_href):
      for href in all_href:
                file_name = href.split(r'/')[-1]
                #这里不能用url_open(url) 因为第一步解析出的是bs对象 图片需要以二进制写入
                #所以这里要先requests.get()然后.content
                href = requests.get(href,headers = headers)
                with open(file_name,'wb') as f:
                        img = href.content
                        f.write(img)
#在当前目录创建ooxx文件夹,将图片保存到ooxx
def download_mm(folder='ooxx'):
      os.mkdir(folder)
      os.chdir(folder)
      save_img(folder,img_href(url))


if __name__ =='__main__':
      download_mm()
第二步

#爬取所有页面图集的封面

import requests
from bs4 import BeautifulSoup
import lxml
import os

headers ={'Referer':'https://www.mzitu.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/6.1.2107.204 Safari/537.36'}
# 打开网页 解析成BeautifulSoup对象
def url_open(url):
      res = requests.get(url,headers=headers)
      html = res.text
      soup = BeautifulSoup(html,'lxml')
      return soup

#找到图集封面的网址 生成一个列表
def find_imgs(url):
      img_addrs = []
      href = url_open(url).find('div',class_='postlist').find_all('img',class_='lazy')
      for i in href:
                img_addrs.append(i['data-original'])
      return img_addrs
# 保存 图片               
def save_img(folder,img_addrs):
      for href in img_addrs:
                file_name = href.split(r'/')[-1]
                #这里不能用url_open(url) 因为第一步解析出的是bs对象 图片需要以二进制写入
                #所以这里要先requests.get()然后.content
                href = requests.get(href,headers = headers)
                with open(file_name,'wb') as f:
                        img = href.content
                        f.write(img)

#在当前目录创建ooxx文件夹,将图片保存到ooxx
def download_mm(folder='ooxx'):
      os.mkdir(folder)
      os.chdir(folder)
      url = 'https://www.mzitu.com'
      #获取最大页面
      page_max = url_open(url).find('div',class_='nav-links').find_all('a',class_='page-numbers')[-2].string

      for i in range(1,int(page_max)+1):
            page_url = url + '/page/' + str(i) +'/'
            img_addrs = find_imgs(page_url)
            save_img(folder,img_addrs)

if __name__ =='__main__':
      download_mm()
如果大家开车累的话可以去听听音乐 刚学习的爬取音乐https://fishc.com.cn/thread-160123-1-1.html
最后一步
**** Hidden Message *****

楠楠不是一米五 发表于 2020-2-27 17:06:02

咳咳 那个我来审查一下

13835549646 发表于 2020-2-27 17:23:54

车车,好快的车车

yanghaolina 发表于 2020-2-27 17:28:34

我是审核员!

greatmaster 发表于 2020-2-27 19:03:17

顶一顶

1558182394 发表于 2020-2-27 20:22:34

琉缓节兮安歌 发表于 2020-2-27 21:55:00

pylxy 发表于 2020-2-27 23:21:23

我是绅士,嗯

trxxdz 发表于 2020-2-28 10:16:02

车不车的无所谓真的就是想学习!!照片呢???

黄泽裕 发表于 2020-2-28 10:24:15

{:5_102:}

1556134029 发表于 2020-2-28 10:31:50

这是什么语言啊

Levin-e 发表于 2020-2-28 10:32:43

学习学习

学Python不开车 发表于 2020-2-28 10:46:20

1556134029 发表于 2020-2-28 10:31
这是什么语言啊

python

学Python不开车 发表于 2020-2-28 10:47:11

trxxdz 发表于 2020-2-28 10:16
车不车的无所谓真的就是想学习!!照片呢???

如果只想开(学)车(习) 建议使用第三步代码 可以漂移过弯

xiaomiany 发表于 2020-2-28 10:55:00

是谁把车门焊死了

1556134029 发表于 2020-2-28 11:04:57

学Python不开车 发表于 2020-2-28 10:46
python

ok谢谢

你吃枣药丸 发表于 2020-2-28 11:06:59

学习

柠檬汽水冰 发表于 2020-2-28 11:39:11

这是用什么软件运行的啊

学Python不开车 发表于 2020-2-28 12:14:12

柠檬汽水冰 发表于 2020-2-28 11:39
这是用什么软件运行的啊

我用的是vscode   用pycharm 也可以 或者用python 自带的 idle也行

9R科技 发表于 2020-2-28 12:35:16

审核官:~
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 爬取妹子图 三部曲