基础爬虫实战1:登录古诗文网并获取页面数据

在网络数据获取的领域中,爬虫是一种强大的工具。今天我们将通过一个实际的例子 —— 登录古诗文网并获取相关页面数据,来学习基础的爬虫知识。

一、准备工作

在开始编写爬虫代码之前,我们需要安装一些必要的 Python 库。本次实战主要用到requests库来发送 HTTP 请求,BeautifulSoup库来解析 HTML 页面。

pip install requests beautifulsoup4

二、分析登录页面

我们的目标是登录古诗文网(登录古诗文网),在开始编写代码之前,需要先分析一下登录页面的结构。

  1. URL 地址:登录页面的 URL 为https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspxfrom参数指定了登录成功后跳转的页面。
  2. 请求头(Headers):为了模拟浏览器请求,我们需要设置User-Agent,它是一个特殊的字符串,用于标识浏览器的类型和版本等信息。
import requests

# 这是登录页面的url地址
url = "https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx"

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36"
}

三、获取页面源码

使用requests库的get方法发送 HTTP GET 请求,获取登录页面的源码。

# 获取页面的源码
response = requests.get(url=url, headers=headers)
content = response.text

四、解析页面源码

我们使用BeautifulSoup库来解析获取到的 HTML 页面,提取出我们需要的信息,比如隐藏域__VIEWSTATE__VIEWSTATEGENERATOR的值,以及验证码图片的链接。

from bs4 import BeautifulSoup

soup = BeautifulSoup(content, "lxml")

# 获取__VIEWSTATE
viewstate = soup.select("#__VIEWSTATE")[0].attrs.get("value")

# 获取__VIEWSTATEGENERATOR
viewstategenerator = soup.select("#__VIEWSTATEGENERATOR")[0].attrs.get("value")


# 获取验证码图片,也可以通过打码平台的代码来实现自动识别
code = soup.select("#imgCode")[0].attrs.get("src")
code_url = "https://so.gushiwen.cn" + code

五、获取验证码图片

获取到验证码图片的链接后,我们可以使用requests库的session对象来保持会话,下载验证码图片到本地。

# 使用session保持会话
session = requests.session()
# 验证码的url的内容
response_code = session.get(code_url)
# 注意此时要使用二进制数据  因为我们是在进行图片的下载
content_code = response_code.content
# wb的模式就是将二进制数据写入到文件
with open("code.jpg", "wb") as fp:
    fp.write(content_code)

六、输入验证码并登录

下载验证码图片后,我们需要手动观察验证码并在控制台输入。然后构造登录所需的数据,使用requests库的post方法发送登录请求。

code_name = input("请输入你的验证码")


# 点击登录
url_post = "https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx"

data_post = {
    "__VIEWSTATE": viewstate,
    "__VIEWSTATEGENERATOR": viewstategenerator,
    "from": "http://so.gushiwen.cn/user/collect.aspx",
    "email": "969@qq.com",##替换你的邮箱
    "pwd": "12345678",
    "code": code_name,
    "denglu": "登录",
}

response_post = session.post(
    url=url, headers=headers, data=data_post
)  # 持续使用同一个session

content_post = response_post.text

with open("gushiwen.html", "w", encoding=" utf-8") as fp:
    fp.write(content_post)

七、遇到的难点

  1. 隐藏域__VIEWSTATE__VIEWSTATEGENERATOR是页面中的隐藏域,它们的值在每次页面加载时都会变化。在登录请求中,必须包含正确的这些值,否则登录会失败。我们通过解析页面源码来获取这些值。
  2. 验证码:验证码是为了防止自动化程序恶意登录。在本次实战中,我们采用了手动输入验证码的方式。在实际应用中,可以使用打码平台的 API 来实现验证码的自动识别,以提高爬虫的自动化程度。

通过本次基础爬虫实战,我们学习了如何使用requestsBeautifulSoup库来实现登录操作并获取页面数据。希望这篇博客能对你有所帮助,让你对爬虫的基本原理和实现有更深入的理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值