介绍;
逛GitHub时发现的一个博客,网站文章数量很多,内容也很友好.python学习基础到进阶都有,案例都是通俗易懂的.
环境使用:
- Python 3.8
- Pycharm
模块使用:
import requests
from fake_useragent import UserAgent
import os.path
from lxml import etree
import re
实现思路:
- 定位想要获取的内容页面,F12 打开开发者工具,判断要请求的下一页的链接地址规律
- 确认要爬取的信息页面后,requests发送请求,获取响应结果
- 这里我用xpath来提取文章内容的链接和标题信息
- 再次请求,获取响应
- 解析响应内容,因为是获取文章内容html的数据,这里我换re了,比较方便些
- 自定义一个html的<!DOCTYPE>骨架页面,可以外部定义一个文件再引用 通过format传递html的数据
- 保存文件到指定文件夹就好了
代码如下:
# -*- coding:utf-8 -*-
# @Author:🎈RedBalloon
# @Time:2022/10/9-8:43
# @File:spider.py
import requests
from fake_useragent import UserAgent
import os.path
from lxml import etree
import re
for page in range(1, 3): # 获取的页数 1-2
url = f'https://chegva.com/tag/python/page/{page}/'
headers = {
'User-Agent': UserAgent().random,
}
requests.packages.urllib3.disable_warnings()
response = requests.get(url=url, headers=headers, verify=False)
response.encoding = response.apparent_encoding
html = response.text
#初始化etree对象
dom_tree = etree.HTML(html)
# 定位文章的内容(同提取 li元素一样)
articles = dom_tree.xpath('//*[@id="content"]/article')
# print(articles)
for contents in articles:
links = contents.xpath('./header/h2/a/@href')[0]
titles = contents.xpath('./header/h2/a/text()')[0]
# 因为 xpath 解析出是以列表返回,通过取下标来转为字符串
# print(titles, links)
# 请求获取到的文章页的链接
detail_page = requests.get(links, headers=headers).text
# 通过re提取需要的html数据
info_data = re.findall(r'</a></span></header>(.*?)<div class="open-message"', detail_page, re.S)[0]
info_html = info_data.replace(' ', '')
# 自己新建一个文件
import html
html_data = html.html_info.format(title=titles, article=info_data)
# 创建文件夹来保存
folder_name = 'python基础'
html_data_path = f'{folder_name}\\'
if not os.path.exists(html_data_path):
os.mkdir(html_data_path)
with open(html_data_path + titles + '.html', mode='w', encoding='utf-8')as f:
f.write(html_data)
print(f'保存完毕******{titles}******')
这是自定义的 html
html_info = """<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{title}</title>
</head>
<body>
{article}
</body>
</html>
"""
评论 (0)