python 小白自学爬虫(5)

   httpget(url)函数

    get_input(maxint,text)函数

    mlt类

            ini函数

            run()函数

                search()函数

                    get_results(url)函数

                tag()函数

                makeurls()函数

                download()函数

 接着看看httpget(url)函数   这个在tag()函数被调用过  用到了Requests模块

http://www.panxiaonan.cc/emlog/post-19.html

def httpget(url):
    i=1
    while i<=3:
        try:
            headers={b'accept': b'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3', b'accept-encoding': b'gzip, deflate, br', b'accept-language': b'zh-CN,zh;q=0.9', b'cache-control': b'max-age=0', b'cookie': b'UM_distinctid=17075d85cff10a-01607eb9ead8a8-376b4502-100200-17075d85d00120; CNZZDATA1255357127=319138885-1582524254-%7C1583800577', b'referer': b'https://www.meitulu.com/', b'sec-fetch-mode': b'navigate', b'sec-fetch-site': b'same-origin', b'sec-fetch-user': b'?1', b'upgrade-insecure-requests': b'1', b'user-agent': b'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}
            r=requests.get(url=url,headers=headers,timeout=10)
            r.encoding='utf-8'
            if r.status_code==404:return None
            else:
                r.raise_for_status()
                return r.text
        except requests.RequestException as e:
            print(colorama.Back.RED+'发生错误:'+str(e))
            print('[{}/3]正在尝试重连!'.format(str(i)))
            i+=1
    print(colorama.Back.RED+'重连失败,请复制错误信息报告作者!')
    input('请按Enter键退出!')
    sys.exit()

1.i=1

定义变量i

2.while i<=3:

循环3次

3.try:

和后面的except 结合获取异常

4.headers={b'accept': b'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3', b'accept-encoding': b'gzip, deflate, br', b'accept-language': b'zh-CN,zh;q=0.9', b'cache-control': b'max-age=0', b'cookie': b'UM_distinctid=17075d85cff10a-01607eb9ead8a8-376b4502-100200-17075d85d00120; CNZZDATA1255357127=319138885-1582524254-%7C1583800577', b'referer': b'https://www.meitulu.com/', b'sec-fetch-mode': b'navigate', b'sec-fetch-site': b'same-origin', b'sec-fetch-user': b'?1', b'upgrade-insecure-requests': b'1', b'user-agent': b'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}

定义web请求头

5.r=requests.get(url=url,headers=headers,timeout=10)

创建requests对象

6.r.encoding='utf-8'

设置编码

7.if r.status_code==404:return None

状态码为404 则返回空

8.r.raise_for_status()

# 如果响应状态码不是 200,就主动抛出异常


9.return r.text


#以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码。

10.except requests.RequestException as e:


获取异常

11.

    print(colorama.Back.RED+'发生错误:'+str(e))
    print('[{}/3]正在尝试重连!'.format(str(i)))
    i+=1

输出

12.print(colorama.Back.RED+'重连失败,请复制错误信息报告作者!')

输出

13.input('请按Enter键退出!')

14.sys.exit()

退出


获取图集资料后  到makeurls()这个函数了  获取图集标题 和之下的所有图片连接


def makeurls(self):
        i=get_input(len(self.results),'请输入爬取图集数量: ')
        for result in self.results[:i]: #result:一个图集,self.results:所有图集
            title=result.xpath("./p[@class='p_title']/a/text()")[0] #获取图集标题
            str_num=result.xpath("./p[1]/text()")[0]
            num=re.search(r'(?<=:).*(?=张)', str_num).group().strip() #提取图片数量
            url0=result.xpath("./a/img/@src")[0].replace('0.jpg','{}.jpg') #图片链接模板

            urls=[] #用于储存一个图集中所有图片链接
            for i in range(int(num)): #生成图片链接
                urls.append(url0.format(str(i+1)))
   
            self.titles.append(title)
            self.allurls.append(urls)
1.i=get_input(len(self.results),'请输入爬取图集数量: ')


输入

2.for result in self.results[:i]:

#result:一个图集,self.results:所有图集

历遍图集资料

3.title=result.xpath("./p[@class='p_title']/a/text()")[0]

#获取图集标题

4.str_num=result.xpath("./p[1]/text()")[0]

获取保存图片数量的标签的内容

5.num=re.search(r'(?<=:).*(?=张)', str_num).group().strip()

#提取图片数量

re模块 正则表达式模块

6.url0=result.xpath("./a/img/@src")[0].replace('0.jpg','{}.jpg')

#图片链接模板

7.urls=[]

#用于储存一个图集中所有图片链接

8.

for i in range(int(num)): #生成图片链接
                urls.append(url0.format(str(i+1)))

9.self.titles.append(title)

赋值给属性  标题

10.self.allurls.append(urls)

赋值给属性  连接


  httpget(url)函数

    get_input(maxint,text)函数

    mlt类

            ini函数

            run()函数

                search()函数

                    get_results(url)函数

                tag()函数

                makeurls()函数

                download()函数



本文标签: web python 模块 re
转载声明:本文为网中小南的原创文章,转载请注明原文地址,谢谢合作

发表评论: