python爬虫——提取抓取内容(3)经典语录网语录抓取
程序员文章站
2024-01-23 12:55:16
...
一.分析代码
对比两个链接
标题正则表达式:
r'<a href="(/a/jingdianmingyan/.*?/\d+\.html)" class="title">(.*?)</a>'
每个标题的内容正则表达式:
r'<div class="content">.*?<td>.*?</div>(.*?)</td>.*?</div>'
二.代码展示
import urllib.request
import urllib.parse
import re
import os
def handle_request(url, page=None): # 设置默认值,可以二次使用(get_text函数)
if page != None:
url = url + str(page) + '.html'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36',
}
# print(url)
request = urllib.request.Request(url, headers=headers)
return request
def get_text(a_href):
# 调用函数构建请求对象
request = handle_request(a_href)
# 发送请求,获取响应
content = urllib.request.urlopen(request).read().decode()
# 解析内容
pattern = re.compile(r'<div class="content">.*?<td>.*?</div>(.*?)</td>.*?</div>', re.S)
lt = pattern.findall(content) # 返回一个列表
# print(lt[0])
text = lt[0]
# 写个正则,将内容里面所有的图片标签全部清空
pat = re.compile(r'<img .*?>')
text = pat.sub('', text)
return text
def parse_content(content):
pattern=re.compile(r'<a href="(/a/jingdianmingyan/.*?/\d+\.html)" class="title">(.*?)</a>')
"""返回的是一个列表,列表中的元素都是元组,元组中第一个元素
就是正则中第一个小括号匹配到的内容,第二个元素就是正则中第二个小括号匹配到的内容"""
lt = pattern.findall(content)
# print(lt)
# 遍历列表
for href_title in lt:
# 获取内容链接
a_href = 'https://www.jdylw.cn'+href_title[0]
# 获取标题
title = href_title[1]
# print(title)
# 向a_href发送请求,获取响应内容
text = get_text(a_href)
# 写入到html中
string = '<h1>%s</h1>%s' % (title, text)
with open('mingyan.html', 'a',encoding="utf8") as fp:
fp.write(string)
def main():
url = 'https://www.jdylw.cn/a/jingdianmingyan/list_15_'
start_page = int(input("请输入起始页码:"))
end_page = int(input("请输入结束页码:"))
for page in range(start_page,end_page+1):
# 根据url和page生成指定的request
request=handle_request(url,page)
# 发送请求
content = urllib.request.urlopen(request).read().decode()
# 解析内容
parse_content(content)
if __name__ == "__main__":
main()
用浏览器查看
上一篇: Java&Spring过时的经典语录