正则表达式初次练习之python爬取古诗词网推荐十页所有古诗词

正则表达式初次练习之python爬取古诗词网推荐十页所有古诗词

import requests
import re

HEADERS = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'}

def poem_get(url):
    resp = requests.get(url=url,headers=HEADERS)
    html = resp.text
    # 注意"."不能获取到\n,即换行,需要加一点代码re.S 等同于re.Dotall
    titles = re.findall(r'<div\sclass="cont">.*?<b>(.*?)</b>',html,re.S)
    dynasty = re.findall(r'<p\sclass="source">.*?<a.*?>(.*?)</a>',html,re.S)
    authors= re.findall(r'<p\sclass="source">.*?</span><a.*?>(.*?)</a>',html,re.S)
    contents = re.findall(r'<div\sclass="contson".*?>(.*?)</div>',html,re.S)
    pure_list =[]
    for content in contents:
        pure_text = re.sub(r'<.*?>',"",content)
        pure_list.append(pure_text.strip())

    poems=[]
    for value in zip(titles,dynasty,authors,pure_list):
        titles,dynasty,authors,pure_list = value
        poem = {"标题":titles,
                "朝代":dynasty,
                "作者":authors,
                "内容":pure_list}
        print(poem)
        print('='*50)
        poems.append(poem)

def url_make():
    ori_url = 'https://www.gushiwen.org/default_{}.aspx'
    for x in range(1,11):
        url = ori_url.format(x)
        poem_get(url)

if __name__  == '__main__':
    url_make()

遇到的问题:
1.利用正则表达式要找好准确的开始和结束点,并且要注意贪婪与非贪婪模式,这样才能事半功倍。
2.对于有的内容包含多行的,可以直接把整个标签取出来之后再利用替换功能去掉多余的标签以及空格等等。
3.列表以及字典等的基础操作还要复习加强。

体会:利用正则表达式来获取需要的内容真的比xpath语法以及BeautifulSoup要快多了哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值