Python用正则表达式实现爬取古诗文网站信息

  • Post category:Python

以下是“Python用正则表达式实现爬取古诗文网站信息”的完整攻略,包括步骤和两个示例。

Python用正则表达式实现爬取诗文网站信息

步骤1:导入requests和re模块

在Python中,需要使用requests和re模块来进行网页请求和正则表达式的匹配。可以使用以下代码导入requests和re模块:

import requests
import re

步骤2:发送请求并获取网页内容

在Python中,可以使用requests库发送HTTP请求,并获取网页内容。可以使用以下代码:

url = 'https://www.gushiwen.org/'
response = requests.get(url)
html = response.text

其中,url是需要请求的网址,response是请求的响应对象,html是响应对象中的网页内容。

步骤3:使用正则表达式匹配网页内容

在Python中,可以使用re模块的正则表式函数来匹配网页内容,并提取需要的信息。可以使用以下代码:

pattern = r'<div\sclass="cont">.*?<h1>(.*?)</h1>.*?<p\sclass="source">.*?<a.*?>(.*?)</a>.*?<a.*?>(.*?)</a>.*?</p>.*?<div\sclass="contson".*?>(.*?)</div>'
results = re.findall(pattern, html, re.S)

其中,pattern是正则表达式,用于匹配网页内容中的诗歌标题、作者、朝代和内容。re.findall()函数用于匹配所有符合正则表达式的内容,并返回一个列表。

示例1:提取古诗文网站中的诗歌信息

以下是一个示例,用于提取古诗文网站中的诗歌信息:

import requests
import re

url = 'https://www.gushiwen.org/'
response = requests.get(url)
html = response.text

pattern = r'<div\sclass="cont">.*?<h1>(.*?)</h1>.*?<p\sclass="source">.*?<a.*?>(.*?)</a>.*?<a.*?>(.*?)</a>.*?</p>.*?<div\sclass="contson".*?>(.*?)</div>'
results = re.findall(pattern, html, re.S)

for result in results:
    title = result[0]
    author = result[1]
    dynasty = result[2]
    content = result[3]
    print('标题:', title)
    print('作者:', author)
    print('朝代:', dynasty)
    print('内容:', content)
    print('------------------------')

在上面的示例中,我们使用正则表达式匹配古诗文网站中的诗歌信息,并使用for循环遍历所有匹配结果。我们提取了诗歌的标题、作者、朝代和内容,并将其打印到控制台上。

示例2:提取古诗文网站中的诗人信息

以下是一个示例,用于提取古诗文网站中的诗人信息:

import requests
import re

url = 'https://www.gushiwen.org/authors/'
response = requests.get(url)
html = response.text

pattern = r'<div\sclass="sonspic">.*?<a.*?href="(.*?)".*?>.*?<img.*?src="(.*?)".*?>.*?<div\sclass="cont">.*?<p><a.*?>(.*?)</a></p>.*?<p>(.*?)</p>'
results = re.findall(pattern, html, re.S)

for result in results:
    author_url = result[0]
    author_image = result[1]
    author_name = result[2]
    author_desc = result[3]
    print('链接:', author_url)
    print('头像:', author_image)
    print('姓名:', author_name)
    print('简介:', author_desc)
    print('------------------------')

在上面的示例中,我们使用正则表达式匹配古诗文网站中的诗人信息,并使用for循环遍历所有匹配结果。我们提取了诗人的链接、头像、姓名和简介,并将其打印到控制台上。

注意事项

在使用Python爬虫时,需要注意以下事项:

  1. 需要遵守网站的爬虫规则,如robots.txt文件等。
  2. 需要使用合适的请求头,以避免网站屏蔽。
  3. 需要使用合适的代理,以避免被网站屏蔽。
  4. 需要使用合适的解析,以便正确解析HTML和XML文档。
  5. 需要使用合适的存储方式,以便后续的数据分和处理。