PS: ‘find’ 只查找给定的标签一次,就算后面还有一样的标签也不会提取出来哦! 而 ‘find_all’ 是在页面中找出所有给定的标签!有十个给定的标签就返回十个(返回的是个list哦!!),想要了解得更详细,就是看看官方文档吧!
哈哈 果然是我们想要的内容!我们已经找向目标前进了一半了!好啦前面已经把怎么实现的方法讲清楚了哦(如果你觉得什么地方有问题或者不清楚,在群里说说 我好改改)下面就要开始加快节奏了!!(篇幅长了 会被人骂的!)
中的
标签的src属性中。是不是很眼熟啊!知道怎么写了吧?下面上代码:
import requests ##导入requests
from bs4 import BeautifulSoup ##导入bs4中的BeautifulSoup
import os headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}##浏览器请求头(大部分网站没有这个请求头会报错、请务必加上哦)
all_url = 'http://www.mzitu.com/all' ##开始的URL地址
start_html = requests.get(all_url, headers=headers) ##使用requests中的get方法来获取all_url(就是:http://www.mzitu.com/all这个地址)的内容 headers为上面设置的请求头、请务必参考requests官方文档解释
Soup = BeautifulSoup(start_html.text, 'lxml') ##使用BeautifulSoup来解析我们获取到的网页(‘lxml’是指定的解析器 具体请参考官方文档哦)
all_a = Soup.find('div', class_='all').find_all('a') ##意思是先查找 class为 all 的div标签,然后查找所有的标签。
for a in all_a: title = a.get_text() #取出a标签的文本 href = a['href'] #取出a标签的href 属性 html = requests.get(href, headers=headers) ##上面说过了 html_Soup = BeautifulSoup(html.text, 'lxml') ##上面说过了 max_span = html_Soup.find_all('span')[10].get_text() ##查找所有的标签获取第十个的标签中的文本也就是最后一个页面了。 for page in range(1, int(max_span)+1): ##不知道为什么这么用的小哥儿去看看基础教程吧 page_url = href + '/' + str(page) ##同上 img_html = requests.get(page_url, headers=headers) img_Soup = BeautifulSoup(img_html.text, 'lxml') img_url = img_Soup.find('div', class_='main-image').find('img')['src'] ##这三行上面都说过啦不解释了哦 print(img_url)
运行一下
完美!就是我们想要的东西,下面开始保存了哦!哈哈!妹子马上就可以到你碗里去了!
首先我们要给每套图建一个文件夹,然后将下载的图片以URL的 xxxxx.jpg 中的xxxxx命名保存在这个文件夹里面。直接上代码了!
import requests ##导入requests
from bs4 import BeautifulSoup ##导入bs4中的BeautifulSoup
import os headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}##浏览器请求头(大部分网站没有这个请求头会报错、请务必加上哦)
all_url = 'http://www.mzitu.com/all' ##开始的URL地址
start_html = requests.get(all_url, headers=headers) ##使用requests中的get方法来获取all_url(就是:http://www.mzitu.com/all这个地址)的内容 headers为上面设置的请求头、请务必参考requests官方文档解释
Soup = BeautifulSoup(start_html.text, 'lxml') ##使用BeautifulSoup来解析我们获取到的网页(‘lxml’是指定的解析器 具体请参考官方文档哦)
all_a = Soup.find('div', class_='all').find_all('a') ##意思是先查找 class为 all 的div标签,然后查找所有的标签。
for a in all_a: title = a.get_text() #取出a标签的文本 path = str(title).strip() ##去掉空格 os.makedirs(os.path.join("D:mzitu", path)) ##创建一个存放套图的文件夹 os.chdir("D:mzitu\"+path) ##切换到上面创建的文件夹 href = a['href'] #取出a标签的href 属性 html = requests.get(href, headers=headers) ##上面说过了 html_Soup = BeautifulSoup(html.text, 'lxml') ##上面说过了 max_span = html_Soup.find_all('span')[10].get_text() ##查找所有的标签获取第十个的标签中的文本也就是最后一个页面了。 for page in range(1, int(max_span)+1): ##不知道为什么这么用的小哥儿去看看基础教程吧 page_url = href + '/' + str(page) ##同上 img_html = requests.get(page_url, headers=headers) img_Soup = BeautifulSoup(img_html.text, 'lxml') img_url = img_Soup.find('div', class_='main-image').find('img')['src'] ##这三行上面都说过啦不解释了哦 name = img_url[-9:-4] ##取URL 倒数第四至第九位 做图片的名字 img = requests.get(img_url, headers=headers) f = open(name+'.jpg', 'ab')##写入多媒体文件必须要 b 这个参数!!必须要!! f.write(img.content) ##多媒体文件要是用conctent哦! f.close()
好了!!来运行一下
哈哈哈完美!!!以上完毕!下面我们来整理一下代码,弄个函数什么的提示下逼格!加点提示什么的
首先我们上面requests一共使用了三次,我们写一个函数复用 (别怕!一点都不难)
headers = {'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"} content = requests.get(url, headers=headers) return content
当调用request的时候会获取URL地址的网页然后返回获取到的response (response 是啥? 你理解成请求网页地址返回的源码就好了! 注意:如果请求的是多媒体文件的话 response返回的是二进制文件哦!)
哈哈!第一个就写好啦,简单吧!
第二个是创建文件
def mkdir(self, path): path = path.strip() isExists = os.path.exists(os.path.join("D:mzitu", path)) if not isExists: print(u'建了一个名字叫做', path, u'的文件夹!') os.makedirs(os.path.join("D:mzitu", path)) return True else: print(u'名字叫做', path, u'的文件夹已经存在了!') return False
调用mkdir这个函数时,会在D:mzitu文件下创建一个path这个参数的文件夹(是参数 不是 path哦!就是你调用的时候传递什么参数给这个函数 就创建什么文件夹!这个函数可以存着,下载东西到本地 都可以用),另外一个好处就是在文件夹已经存在的情况下不会报错退出程序哦! 不使用就会诶!
好啦 剩下的我就一股脑的写出来了!
import requests from bs4 import BeautifulSoup import os class mzitu(): def all_url(self, url): html = self.request(url)##调用request函数把套图地址传进去会返回给我们一个response all_a = BeautifulSoup(html.text, 'lxml').find('div', class_='all').find_all('a') for a in all_a: title = a.get_text() print(u'开始保存:', title) ##加点提示不然太枯燥了 path = str(title).replace("?", '_') ##我注意到有个标题带有 ? 这个符号Windows系统是不能创建文件夹的所以要替换掉 self.mkdir(path) ##调用mkdir函数创建文件夹!这儿path代表的是标题title哦!!!!!不要糊涂了哦! os.chdir(path) ##切换到目录 href = a['href'] self.html(href) ##调用html函数把href参数传递过去!href是啥还记的吧? 就是套图的地址哦!!不要迷糊了哦! def html(self, href): ##这个函数是处理套图地址获得图片的页面地址 html = self.request(href) max_span = BeautifulSoup(html.text, 'lxml').find_all('span')[10].get_text() for page in range(1, int(max_span) + 1): page_url = href + '/' + str(page) self.img(page_url) ##调用img函数 def img(self, page_url): ##这个函数处理图片页面地址获得图片的实际地址 img_html = self.request(page_url) img_url = BeautifulSoup(img_html.text, 'lxml').find('div', class_='main-image').find('img')['src'] self.save(img_url) def save(self, img_url): ##这个函数保存图片 name = img_url[-9:-4] img = self.request(img_url) f = open(name + '.jpg', 'ab') f.write(img.content) f.close() def mkdir(self, path): ##这个函数创建文件夹 path = path.strip() isExists = os.path.exists(os.path.join("D:mzitu", path)) if not isExists: print(u'建了一个名字叫做', path, u'的文件夹!') os.makedirs(os.path.join("D:mzitu", path)) return True else: print(u'名字叫做', path, u'的文件夹已经存在了!') return False def request(self, url): ##这个函数获取网页的response 然后返回 headers = {'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"} content = requests.get(url, headers=headers) return content Mzitu = mzitu() ##实例化 Mzitu.all_url('http://www.mzitu.com/all') ##给函数all_url传入参数 你可以当作启动爬虫(就是入口)
完美!!好啦!结束了!
如果大家觉得还能看懂、还行的话 我后面在写点儿其他的。
给大家看看我的成果
最后感谢mzitu.com 的站长。
程序员共读↓↓↓
Java编程精选↓↓↓
更多推荐《年薪百万的程序员都在干什么?》
涵盖:程序人生、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、Java、Python、Web开发、安卓开发、iOS开发、C/C++、.NET、Linux、数据库、运维等