Python3爬虫入门第二课

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36092584/article/details/81252674

前面用的一直是Python内置的urllib库进行爬虫实验,后面发现原来用第三方库requests更佳
下面这个是对糗事百科的段子爬取,代码更加规范,符合面向对象,而且特别是requests用起来更方便

在windows系统下只需要在命令行输入命令 pip install requests 即可安装。

# coding:utf-8
import re
import requests

class JOKE:

    # 魔法方法
    def __init__(self):
        self.user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
        self.header = {'User-Agent' : self.user_agent}

    def getPage(self):
        try:
            url = 'http://www.qiushibaike.com/hot/page/1'
            response = requests.get(url, headers = self.header, timeout = 30)
            
            pattern = re.compile('<div class="content">\s<span>(.*?)</span>.*?<div class="stats"', re.S)
            items = re.findall(pattern, response.text)
            if len(items) == 0:
                print("未抓取到数据!!!")
            #saveContent(response.text)
            for item in items:
                br = re.compile('<br/>')
                text = re.sub(br, '\n', item)
                print(text)

        except:
            return "产生异常"    


if __name__ == '__main__':
    joke = JOKE()
    joke.getPage()

代码说明:

多行匹配,那么需要加上re.S
str = "a23b\na34b"
re.findall(r"a(\d+)b.+a(\d+)b", str)#输出[]
#因为不能处理str中间有\n换行的情况
re.findall(r"a(\d+)b.+a(\d+)b", str, re.S)#s输出[('23', '34')]

贪婪和非贪婪匹配
str = "a123b456b"
print re.findall(r"a(.+?)b", str)#输出['123']#?控制只匹配0或1个,所以只会输出和最近的b之间的匹配情况
print re.findall(r"a(.+)b", str)#输出['123b456']
print re.findall(r"a(.*)b", str)#输出['123b456']

猜你喜欢

转载自blog.csdn.net/qq_36092584/article/details/81252674
今日推荐