用正则爬取网页

本文介绍了如何利用正则表达式从网页中抓取数据。通过创建正则对象,使用`re.compile()`和`re.findall()`进行匹配查找和数据提取。示例中展示了从HTML字符串中提取`<a>`标签的href和`<title>`标签的内容,并解释了正则表达式的关键部分,如非贪婪匹配和贪婪匹配。此外,还提到了使用`xlwt`库处理Excel文件,`urllib.parse.quoto`对URL编码,以及爬取糗事百科和智联招聘的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.正则表达式: ①创建正则对象

                   ②匹配查找

                   ③提取数据保存

2.import re

string = """<div><a href="www.baidu.com"></a></div><title>正则</title>

pattern = re.compile(r'<a href="(.*?)".*?<title>(.*?)</title>', re.S)

res = re.findall(pattern, string)

或res = re.findall(re.compile(r'<a href="(.*?)".*?<title>(.*?)</title>', re.S), string)

解释: re:用于提取字符串内容的模块

        ():用于提取一组数据

        r:防止转义

        re.S:可以将正则的搜索域不再是一行,而是整个html字符串

        findall():返回的是列表

        .*? :非贪婪匹配

        .* :贪婪匹配

3.import xlwt :xlwl操作excel第三方的包

4.from urllib.parse import quoto: quoto是对url地址中的中文进行编码的一个函数

5.爬取糗事百科

import re, random, time, pymysql
from urllib.request import Request, urlopen


class QSBKDataTool(object):
    #  [('\n猩猩眨呀眨\n', '24', '\n\n\n昨晚同学聚会,以前的死对头非要坐我旁边,盯着我脸上的痘痘说她现在不吃肉,皮肤变好了。<br/>我放下筷子盯着她的水桶腰,说我只吃一点点肉,但不吃主食,所以体重控制的不错……<br/>聚会结束各自离去,也许是冤家路窄,我俩在牛肉面馆里又遇到了。\n\n', '5785', '43')]
    # 定义一个工具
    remove_n = re.compile(r'\n', re.S)
    remove_br = re.compile(r'<br/>|<br>', re.S)

    @classmethod
    def process_data(cls, origin_data):
        # 处理数据
        # 先给数据一个空列表
        result_data = []
        for data in origin_data:
            # 处理昵称 data[0]
            nick_name = data[0]
            # re.sub可以去掉标记字符
            nick_name = re.sub(cls.remove_n, '', nick_name)   # 相当于str字符串中的replace()

            # 处理内容 data[3]
            content = data[3]
            content = re.sub(cls.remove_n, '', content)
            content = re.sub(cls.remove_br, '', content)

            result_data.append((nick_name, data[1], data[2], content, data[4], data[5]))
        return result_data

    @classmethod
    def process_next(cls, data):
        next_page_str = data[0][1]
        next_page_str = re.sub(cls.remove_n, '', next_page_str)
        return (data[0][0], next_page_str)


class QSBKDBTool(object):

    db = None
    cursor = None

    @classmethod
    def connect_db(cls):
        cls.db = pymysql.connect(host='localhost', user='root', passwd='123456', db='qsbk', port=3306, charset='utf8')
        cls.cursor = cls.db.cursor()

    @classmethod
    def save_list_data(cls, list_data):
        # 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值