宋词三百首的网页地址https://so.gushiwen.org/gushi/songsan.aspx 爬取网页,获取词的卷、词牌名首句 和作者,再对其编号(若没有首句,首句显示无)显示前三十首数据,每首显示如下所示 注:可复制词牌名和首句之间的'· 写出爬虫的代码,不要结果
时间: 2024-09-07 21:02:27 浏览: 69
为了编写一个爬虫来从宋词三百首的网页上提取词的卷、词牌名、首句和作者,并对前三十首进行格式化,我们可以使用Python的`requests`和`BeautifulSoup`库。由于网页结构可能会有所变化,以下代码提供了一个基本的模板,需要根据实际页面结构进行调整。假设每个条目的信息在HTML中都是以类似的方式组织的。
```python
import requests
from bs4 import BeautifulSoup
import re
def fetch_song_info(url):
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
songs = soup.select(".song-item")[:30] # 取前30首歌
song_data = []
for i, song in enumerate(songs):
try:
# 提取相关信息
volume = song.select_one(".volume").text.strip() # 卷
title = song.select_one(".title a").text.strip() # 词牌名
first_line = song.select_one(".first-line").text.strip() or "无" # 首句
author = song.select_one(".author").text.strip() # 作者
# 格式化并添加到列表中
song_data.append(f"{i + 1}. {volume} - {title}: {first_line} 作者: {author}")
except (AttributeError, IndexError): # 处理可能存在的缺失元素
print(f"第{i + 1}首数据无法提取,请检查网页结构是否改变")
return song_data
url = "https://so.gushiwen.org/gushi/songsan.aspx"
songs = fetch_song_info(url)
for song in songs:
print(song)
```
请注意,这个代码片段假设HTML的class名(例如`.volume`, `.title`, `.first-line`, `.author`)不会改变。如果实际网站结构有变动,你需要更新选择器(`select`或`.select_one`)来匹配正确的元素。同时,记得安装`requests`库(如果尚未安装):
```bash
pip install requests
```
阅读全文