古诗文网
import requests
import re
import time
HEADERS = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
}
def spider_page(url):
response = requests.get(url,headers=HEADERS)
text_raw = response.text
titles=re.findall(r'<div\sclass="cont">.*?<b>(.*?)</b>',text_raw,re.DOTALL)
dynasties=re.findall(r'<p\sclass="source">.*?<a.*?>.*?<a.*?>(.*?)</a>',text_raw,re.DOTALL)
names=[]
img_urls=[]
text=re.findall(r'<p\sclass="source">.*?<a.*?>(.*?)</a>',text_raw,re.DOTALL)
for text_item in text:
img_url = re.search(r'<img src="(.*?)"', text_item)
name = re.search(r'alt="(.*?)"', text_item)
if img_url and name:
names.append(name.group(1))
img_urls.append(img_url.group(1))
contents_pre=re.findall(r'<div\sclass="contson".*?>(.*?)</div>',text_raw,re.DOTALL)
contents=[]
for content_pre in contents_pre:
content=re.sub(r'<.*?>|\n',"",content_pre)
contents.append(content.strip())
poems=[]
for value in zip(titles,dynasties,names,contents,img_urls):
title,dynastie,name,content,img_url=value
poem={
'title':title,
'dynastie':dynastie,
'author':name,
'img_url':img_url,
'content':content
}
poems.append(poem)
return poems
def spider():
poems=[]
for x in range(1,11):
print('第{}页正在爬取'.format(x))
url='https://www.gushiwen.org/default_{}.aspx'.format(x)
print(url)
poems+=spider_page(url)
time.sleep(1)
for poem in poems:
print(poem)
print('='*40)
if __name__=='__main__':
spider()
spider_page(url): 这个函数从给定的 URL 获取古诗。它首先发送一个 GET 请求到 URL,然后解析返回的 HTML 文档,提取出诗词的标题、朝代、作者、内容和图片 URL。
spider(): 这是主函数,它遍历诗词列表页的 URL,对每个诗词列表页调用 spider_page(url) 函数获取诗词信息,然后将所有诗词的信息打印出来。
这次利用的是re,上一篇用的是xpath和bs4。
结果:
注意不要爬太多。
最近新开了公众号,请大家关注一下。