正则表达式初次练习之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要快多了哈哈