<19>python学习笔记——爬虫1.0bata /1.1函数化

新手完全参考了http://cuiqingcai.com/3179.html?from=singlemessage&isappinstalled=1,原版请移步查看,非常详细非常好。


我的第一个爬虫。一条条语句读懂了,并了解了运作的方式。仅做记录及日后翻查学习。

#导入需要的包
import requests
from bs4 import BeautifulSoup
import os

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}#设置浏览器请求头

one_url = 'http://www.mzitu.com/all'##开始的url地址
start_html = requests.get(one_url,headers=headers)##使用requests中的get方法获取all_url的内容,加上浏览器请求头
#print(start_html.text)
Soup = BeautifulSoup(start_html.text,'lxml')##用BeautifulSoup来解析获取到的网页文件,用lxml解析器
# li_list = Soup.find_all('li')
# # for li in li_list:
# #     print(li)

all_span = Soup.find('div',class_='all').find_all('a')##用Soup对象的find方法找标签先查找class为all的div标签,然后查找所有<a>标签。find_all是查找所有<a>标签的意思,返回的是一个列表

for a in all_span:
    # print(a)
    title = a.get_text()##提取<a>标签内的文档
    href = a['href']##提取<a>标签内的href属性,实际提取的是套图地址
 #   print(title,href)
    html = requests.get(href,headers=headers)##使用requests中的get方法获取herf属性所指网页的内容,加上浏览器请求头
    html_Soup = BeautifulSoup(html.text,'lxml')##用BeautifulSoup来解析获取到的网页文件,用lxml解析器
    max_span = html_Soup.find('div',class_='pagenavi').find_all('span')[-2].get_text()##查找所有的<span>标签获取最后一个标签中的文本也就是最后一个页面了
    for page in range(1,int(max_span)+1): ##用range产生页面序列
        page_url = href + '/'+str(page)##手动拼接每一个页面地址
 #       print(page_url)
        img_html = requests.get(page_url,headers=headers)##使用requests中的get方法获取herf属性所指网页的内容,加上浏览器请求头
        img_Soup = BeautifulSoup(img_html.text,'lxml')##用BeautifulSoup来解析获取到的网页文件,用lxml解析器
        img_url = img_Soup.find('div',class_='main-image').find('img')['src']##用img_Soup对象的find方法找标签先查找class为main-image的div标签,然后查找<img>标签里面的src。
 #       print(img_url)
        #下面是建立保存图片
        name = img_url[-9:-4]##取url的倒数第四至第九位做图片的名字
        img = requests.get(img_url,headers=headers)##使用requests中的get方法获取所指网页的内容,加上浏览器请求头
        f = open(name+'.jpg','ab')##写入多媒体文件必须要b这个参数
        f.write(img.content)##多媒体文件要用conctent
        f.close()
修改成函数后的代码:

#导入需要的包
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')##用Soup对象的find方法找标签先查找class为all的div标签,然后查找所有<a>标签。find_all是查找所有<a>标签
        for a in all_a:
            title = a.get_text()
            print(u'开始保存:',title)##提示保存XXX
            path = str(title).replace('?','_')##设置名字变量,将?替换成_
            self.mkdir(path)##调用mkdir函数创建文件夹,path代表的是标题名
            href = a['href']##取出<a>里面的href属性
            self.html(href)##调用html函数吧href参数传递过去,href是套图的地址

    #设置一个函数处理套图地址获得图片的页面地址
    def html(self,href):
        html = self.request(href)##调用request函数把套图地址传进去,返回一个response
        max_span = BeautifulSoup(html.text,'lxml').find('div',class_='pagenavi').find_all('span')[-2].get_text()##查找所有的<span>标签获取最后一个标签中的文本也就是最后一个页面了
        for page in range(1,int(max_span)+1):##用range产生页面序列
            page_url = href + '/'+str(page)##手动拼接每一个页面地址
            self.img(page_url)##调用img函数

    #设置一个函数处理图片页面地址获得图片的实际地址
    def img(self,page_url):
        img_html = self.request(page_url)##调用request函数把图片页面地址传进去,返回一个response
        img_url = BeautifulSoup(img_html.text,'lxml').find('div',class_='main-image').find('img')['src']##用img_Soup对象的find方法找标签先查找class为main-image的div标签,然后查找<img>标签里面的src。
        self.save(img_url)##调用save函数保存图片,把img_url地址传递过去

    #设置一个保存图片的函数
    def save(self,img_url):
        name = img_url[-9:-4]##取url的倒数第四至第九位做图片的名字
        img = self.request(img_url)##调用request函数把图片地址传进去,返回一个response
        f = open(name+'.jpg','ab')##写入多媒体文件必须要b这个参数
        f.write(img.content)##多媒体文件要用conctent
        f.close()##关闭文件对象

    #创建一个函数用来创建文件夹
    def mkdir(self,path):
        path = path.strip() ##去除path前后空格
        isExists = os.path.exists(os.path.join('F:\mzitu',path))##join将各部分合成一个路径名。os.path.exists判断后面的路径是否存在
        if not isExists: ##如果为False,创建文件夹
            print(u'创建了一个名字叫做',path,u'的文件夹!')
            os.makedirs(os.path.join('F:\mzitu',path))##创建多层文件夹,用join合成单独的一个路径文件夹
            os.chdir(os.path.join('F:\mzitu',path))##改变工作目录
            return True
        else:
            print(u'名字叫做',path,u'的文件夹已经存在了!')
            return False

    #创建获取网页response的函数并返回
    def request(self,url):
        headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}#设置浏览器请求头
        content = requests.get(url,headers=headers) ##使用requests中的get方法获取页面的内容,加上浏览器请求头
        return content

Mzitu = mzitu()  ##实例化
#这就是入口!
Mzitu.all_url('http://www.mzitu.com/all')



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值