python 爬虫(正则表达式案例)

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

        一直对爬虫充满着好奇,最近终于有时间来好好学习一番,我是在网上找到传智播客的课程视频,跟着视频学习python编写爬虫的,很多案例都很通用,特别记录一下,以后工作中遇到了可以直接拿来使用。

        下面这个案例是使用正则表达式来提取内涵段子网上的段子。该示例是在python3的环境下运行的

import urllib.request
import re
import random

class Spider:

    def headers(self):
        """
        随机产生User-Agent的header
        :return: 
        """
        headers_list = [
            "User-Agent:Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0",
            "User-Agent:Mozilla/4.0(compatible;MSIE8.0;WindowsNT6.0;Trident/4.0)",
            "User-Agent:Mozilla/4.0(compatible;MSIE7.0;WindowsNT6.0)",
            "Mozilla/5.0(WindowsNT6.1;rv:2.0.1)Gecko/20100101Firefox/4.0.1",
            "Opera/9.80(WindowsNT6.1;U;en)Presto/2.8.131Version/11.11",
            "Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;TencentTraveler4.0)",
            "Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;Maxthon2.0)",
            "Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;360SE)",
            "Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1)",
        ]
        ua_agent = random.choice(headers_list)
        return ua_agent
                
    def load_page(self, url, ua_agent):
        """
        加载一个页面的数据
        :param url: 页面的url
        :param ua_agent: User-Agent 
        :return: 返回页面的html数据
        """
        headers = {"User-Agent": ua_agent}
        request = urllib.request.Request(url, headers=headers)
        response = urllib.request.urlopen(request)
        return response.read()

    def parse(self, html):
        """
        解析页面的数据
        :param html: 
        :return: 
        """
        # re.S 是将所有的字符串作为一个整体进行匹配; re.I 表示忽略大小写
        patten = re.compile('<h1 class="title">.*?</h1>', re.S)
        
        result = patten.findall(html.decode("utf-8"))
        
        return result

    def write(self, content):
        """
        保存数据,把提取出的数据写入文件中
        :param content: 提取的数据
        :return: 
        """
        # 返回的content是一个list,写入文件的时候遍历list逐条写入
        for each in content:
            # 把页面中的多余字符用空格替代
            each = each.replace('<h1 class="title">', '').replace('<p>', '').replace('</p>', '').replace('</h1>', '')
            # print(each)
            with open("duanzi.text", "w") as f:
                f.write(each + "\n")

    def main(self, url):
        """
        :param url: 爬取数据的起始页面url
        :return: 
        """
        html = self.load_page(url)
        content = self.parse(html)
        self.write(content)

if __name__ == "__main__":
    url = "http://www.neihanshequ.com"
    spider = Spider()
    spider.main(url)



猜你喜欢

转载自blog.csdn.net/qq_29557137/article/details/79220050
今日推荐