python - 网页抓取脚本返回和空列表
问题描述
我正在尝试为测试网站编写我的第一个网络爬虫。它涉及登录,我遵循了有关如何处理此类情况的教程。
import requests
from lxml import html
payload = {
"email": "test_test@test.com",
"password": "123qweasd",
"_token": "3ow4dl7COwnRHa8a6nvNGp4eLkF3wQapT3otGXjR"
}
rs = requests.session()
login_url = 'https://cloud.webscraper.io/login'
log_page = rs.get(login_url)
tree = html.fromstring(log_page.content)
auth_token = list(set(tree.xpath("//input[@name='_token']/@value")))[0]
login = rs.post(login_url,data=payload, headers=dict(referer=login_url))
url = "https://cloud.webscraper.io/sitemaps"
result = rs.get(url, headers=dict(referer=url))
tree = html.fromstring(result.text)
sidebar_cat = tree.xpath('//*[@id="main-menu-inner"]/ul')
print(sidebar_cat)
我希望这个脚本列出侧边栏中的类别。似乎脚本每次都返回并清空列表。电流输出为
"[]
Process finished with exit code 0"
解决方案
您已经提取_token
了值,但使用了硬编码值。尝试将提取的值传递给payload
:
import requests
from lxml import html
rs = requests.session()
login_url = 'https://cloud.webscraper.io/login'
log_page = rs.get(login_url)
tree = html.fromstring(log_page.content)
auth_token = tree.xpath("//input[@name='_token']/@value")[0]
payload = {
"email": "test_test@test.com",
"password": "123qweasd",
"_token": auth_token
}
login = rs.post(login_url,data=payload, headers=dict(referer=login_url))
url = "https://cloud.webscraper.io/sitemaps"
result = rs.get(url, headers=dict(referer=url))
tree = html.fromstring(result.text)
sidebar_cat = tree.xpath('//*[@id="main-menu-inner"]/ul')
print(sidebar_cat)
推荐阅读
- .net - 什么是 StickyLabel,为什么它位于 ContextMenuStrip.Contols 集合中?
- swift - @propertyDelegate 和 @propertyWrapper 之间的区别
- c++ - 为什么这个 std::sort 比较失败?
- python - 如何使用 Python 重新加权以维持不同样本之间的协变量分布?
- kotlin - 为什么我不能在 .copyOf() 之后链接 .sort()?
- python - 如何从熊猫中提取特定的字符串?
- websphere - 访问被拒绝读取 java.util.Permissions
- unity3d - 无法在 Unity3D 上使用标准 NetworkManager(不是 MatchMaking!)在两个设备之间进行 UNET 工作
- vb.net - 由于“未声明”错误,无法调用 form_Load 事件,但名称正确且事件位于相应的类中
- javascript - document.querySelectorAll("a") 返回带有 # url 的空白节点列表