一般来说,请求可以分为四部分内容:请求网址、请求方法、请求头和请求体。
它们在请求详细信息中的位置。
一、获取登录网页
# 设置登录请求的请求网址
login_url = 'https://wp.forchange.cn/wp-admin/admin-ajax.php'
# 输入用户的账号密码
username = input('请输入用户名:')
password = input('请输入密码:')
# 设置登录请求的请求体数据
login_data = {
'action': 'ajaxlogin',
'username': username,
'password': password,
'remember': 'true'
}
# 请求登录网站
login_res = requests.post(login_url, data=login_data)
# 设置要请求的书籍评论页链接
comment_url = 'https://wp.forchange.cn/psychology/11069/comment-page-1/'
# 携带获取到的 Cookies 信息请求书籍评论页
comment_res = requests.get(comment_url, cookies=login_res.cookies)
# 打印获取到的网页内容
print(comment_res.text)
Cookies 里含有登录相关的信息,下次浏览器请求该网站的网页时,浏览器会将 Cookies 发送给服务器,服务器通过识别 Cookies 来判断发送请求的用户是否已登录。
提交方式为post,这样可以保护用户账号安全
post函数 语法:requests.post(url,data)
调用 post() 函数时会给函数的参数 url
和参数 data
传值。其中参数 url
传入登录请求的请求网址;参数 data
传入登录请求的请求体,数据多以字典形式写入。(请求的请求体,可以在请求详情页的 【Form Data】 位置找到)
二、解析网页
解析网页使用 BeautifulSoup 库来进行解析
先导入包
from bs4 import BeautifulSoup
解析请求到的书籍评论页内容
soup = BeautifulSoup(comment_res.text, 'html.parser')
找到网页中所需信息,他们的最小父级标签
查找信息
搜索网页中所有包含评论
comment_list = soup.find_all('div', class_= 最小父级标签 )
查找用户名
comment_author = comment.find('cite', class_='fn').text[:-2]
cite是div 最小父级标签中保护用户名的子标签,带上class_='fn'属性就可以访问到名字,后面切片是把后面的分号去掉
comment_time = comment.find('p', class_='date').text
# 提取评论内容
comment_content = comment.find('div', class_='bd').find('p').text
保存信息
with open('comments.csv', 'w', encoding='utf-8-sig') as f:
# 将文件对象转换成 DictWriter 对象
f_csv = csv.DictWriter(f, fieldnames=['用户名', '评论时间', '评论内容'])
# 写入表头与数据
f_csv.writeheader()
f_csv.writerows(data_list)