直接上代码:
import urllib.request
import urllib.parse
import re
def handle_request(url, page=None):
if page != None:
url = url + str(page) + '.html'
#print(url)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0',
}
request = urllib.request.Request(url=url, headers=headers)
return request
def get_text(a_href):
#调用函数,构建请求对象
request = handle_request(a_href)
#发送请求,获得响应
content = content = urllib.request.urlopen(request).read().decode()
pattern = re.compile(r'<div class="neirong">(.*?)</div>',re.S)
lt = pattern.findall(content)
text = lt[0]
#将内容里面所有的内容标签全部清空
pat = re.compile(r'<img.*?>')
text = pat.sub('',text)
# print(lt)
return text
def parse_content(content):
#写正则
#<a href="/lizhi/qianming/20190141188.html"><b>人生有时很难但愿你学会坚强——告诫年轻人的经典励志语录</b></a>
#(/lizhi/qianming/\d+\.html)的括号是为了获取/lizhi/qianming/20190841364.html这个内容地址
pattern = re.compile(r'<h3><a href="(/lizhi/qianming/\d+\.html)"><b>(.*?)</b></a></h3>')
#返回的lt是一个列表,列表中的元素都是元组,
# 元组中第一个元素就是正则中第一个小括号匹配到的内容,
# 元组中第二个元素就是正则中第二个小括号匹配到的内容
lt = pattern.findall(content)
# print(lt)
# print(len(lt))
for href_title in lt:
a_href = 'http://www.yikexun.cn' + href_title[0]
#获取标题
title = href_title[-1]
#向a_href发送请求,获取响应内容
text = get_text(a_href)
string = '<h1>%s/<h1>%s' % (title,text)
with open('lizhi.html', 'a', encoding='utf8') as fp:
fp.write(string)
def main():
url = 'http://www.yikexun.cn/lizhi/qianming/list_50_'
start_page = int(input('请输入起始页码:'))
end_page = int(input('请输入结束页码:'))
for page in range(start_page, end_page + 1):
#根据url和page生成指定的request
print('第%s也开始下载....'%page)
#生成请求对象
request = handle_request(url, page)
# 发送请求对象,获取请求内容
content = urllib.request.urlopen(request).read().decode()
#解析内容,提取所有图片链接下载链接
parse_content(content)
print('第%s也结束下载....' % page)
print()
print()
if __name__ =='__main__':
main()
完了之后会在当前目录下生成一个
lizhi.html
文件,打开如下图:
完成!
更多学习资源欢迎关注公众号:源起1024
或扫描下面二维码关注