python3利用正则表达式爬取内涵段子

本文介绍了一种使用正则表达式从特定网站抓取文本内容的爬虫实现方法。通过编写Python脚本,该方法能够从指定网页上匹配并提取段子文本,再将其保存到本地文件中。

似乎正则在爬虫中用的不是很广泛,但是也是基本功需要我们去掌握。
先将内涵段子网页爬取下来,之后利用正则进行匹配,匹配完成后将匹配的段子写入文本文档内。代码如下:

# -*- coding:utf-8 -*-
from urllib import request as urllib2
import re
# 利用正则表达式爬取内涵段子
url = r'http://www.neihanpa.com/article/list_5_{}.html'

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0',
}
file_name = '内涵段子.txt'
for page in range(2):
# 2表示页数,可以自行调整
    fullurl = url.format(str(page+1))
    request = urllib2.Request(url=fullurl, headers=headers)
    response = urllib2.urlopen(request)
    html = response.read().decode('gbk')
    # re.S 如果没有re.S 则是只匹配一行有没有符合规则的字符串,如果没有则下一行重新匹配
    # 如果加上re.S 则是将所有的字符串作为一个整体进行匹配
    pattern = re.compile(r'<div\sclass="f18 mb20">(.*?)</div>',re.S)
    duanzis = pattern.findall(html)
    for duanzi in duanzis:
        duanzi = duanzi.replace('<p>','').replace('</p>','').replace('<br />','\n').replace('&ldquo;','').replace('&rdquo','').replace('&hellip;','')
        try:
            # 将爬取的段子写入文件
            file = open(file_name,'a',encoding='utf-8')
            file.write('\n'.join(duanzi.split()))
            file.close()
        except OSError as e:
            print(e)
### 爬取百度新闻首页的部分新闻内容爬取百度新闻首页的部分新闻内容,可以使用正则表达式结合 Python 的 `urllib` 和 `re` 模块。以下是具体实现方法和代码示例: #### 1. 使用 `urllib` 获取网页内容 通过 `urllib.request.urlopen()` 函数访问百度新闻首页,获取其 HTML 内容[^1]。 ```python import urllib.request url = "https://news.baidu.com/" content = urllib.request.urlopen(url).read().decode(&#39;utf-8&#39;) ``` #### 2. 定义正则表达式提取新闻标题 根据百度新闻首页的 HTML 结构,新闻标题通常位于 `<a>` 标签中,并且包含特定的类名或属性。例如,假设新闻标题的结构如下: ```html <a href="新闻链接" target="_blank">新闻标题</a> ``` 可以定义正则表达式为: ```python import re pattern = r&#39;<a.*?href=".*?".*?>(.*?)</a>&#39; titles = re.findall(pattern, content, re.S) ``` 这里 `(.*?)` 表示匹配新闻标题的内容,`re.S` 参数允许正则表达式匹配多行内容[^2]。 #### 3. 打印爬取到的新闻标题 将爬取到的新闻标题打印出来,确保结果正确: ```python for title in titles: print(title.strip()) ``` 完整代码如下: ```python import urllib.request import re # 访问百度新闻首页 url = "https://news.baidu.com/" content = urllib.request.urlopen(url).read().decode(&#39;utf-8&#39;) # 定义正则表达式匹配新闻标题 pattern = r&#39;<a.*?href=".*?".*?>(.*?)</a>&#39; titles = re.findall(pattern, content, re.S) # 输出新闻标题 for title in titles: print(title.strip()) ``` #### 注意事项 - 正则表达式的准确性取决于目标网站的 HTML 结构。如果百度新闻首页的结构发生变化,可能需要调整正则表达式。 - 爬取网页时需遵守目标网站的 `robots.txt` 文件规定,避免违反相关法律或网站政策[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangbowj123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值