|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 学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
最后一步
|
评分
-
查看全部评分
|