Ⅰ 如何用 Python 爬取需要登录的网站
在header里加入cookie就可以了,例如网络首页,你没有登录和登录的效果是不一样的,如果使用python模拟登录的效果,就要把cookie一起post过去。
Ⅱ 如何用 Python 爬取需要登录的网站
最近我必须执行一项从一个需要登录的网站上爬取一些网页的操作。它没有我想象中那么简单,因此我决定为它写一个辅助教程。
在本教程中,我们将从我们的bitbucket账户中爬取一个项目列表。
教程中的代码可以从我的Github中找到。
我们将会按照以下步骤进行:
提取登录需要的详细信息
执行站点登录
爬取所需要的数据
在本教程中,我使用了以下包(可以在requirements.txt中找到):
Python
1
2
requests
lxml
步骤一:研究该网站
打开登录页面
进入以下页面 “bitbucket.org/account/signin”。你会看到如下图所示的页面(执行注销,以防你已经登录)
仔细研究那些我们需要提取的详细信息,以供登录之用
在这一部分,我们会创建一个字典来保存执行登录的详细信息:
1. 右击 “Username or email” 字段,选择“查看元素”。我们将使用 “name” 属性为 “username” 的输入框的值。“username”将会是 key 值,我们的用户名/电子邮箱就是对应的 value 值(在其他的网站上这些 key 值可能是 “email”,“ user_name”,“ login”,等等)。
2. 右击 “Password” 字段,选择“查看元素”。在脚本中我们需要使用 “name” 属性为 “password”的输入框的值。“password” 将是字典的 key 值,我们输入的密码将是对应的 value 值(在其他网站key值可能是 “userpassword”,“loginpassword”,“pwd”,等等)。
3. 在源代码页面中,查找一个名为 “csrfmiddlewaretoken” 的隐藏输入标签。“csrfmiddlewaretoken” 将是 key 值,而对应的 value 值将是这个隐藏的输入值(在其他网站上这个 value 值可能是一个名为 “csrftoken”,“authenticationtoken”的隐藏输入值)。列如:“”。
最后我们将会得到一个类似这样的字典:
Python
1
2
3
4
5
payload = {
"username": "<USER NAME>",
"password": "<PASSWORD>",
"csrfmiddlewaretoken": "<CSRF_TOKEN>"
}
请记住,这是这个网站的一个具体案例。虽然这个登录表单很简单,但其他网站可能需要我们检查浏览器的请求日志,并找到登录步骤中应该使用的相关的 key 值和 value 值。
步骤2:执行登录网站
对于这个脚本,我们只需要导入如下内容:
Python
1
2
import requests
from lxml import html
首先,我们要创建session对象。这个对象会允许我们保存所有的登录会话请求。
Python
1
session_requests = requests.session()
第二,我们要从该网页上提取在登录时所使用的 csrf 标记。在这个例子中,我们使用的是 lxml 和 xpath 来提取,我们也可以使用正则表达式或者其他的一些方法来提取这些数据。
Python
1
2
3
4
5
login_url = "n/?next=/"
result = session_requests.get(login_url)
tree = html.fromstring(result.text)
authenticity_token = list(set(tree.xpath("//input[@name='csrfmiddlewaretoken']/@value")))[0]
**更多关于xpath 和lxml的信息可以在这里找到。
接下来,我们要执行登录阶段。在这一阶段,我们发送一个 POST 请求给登录的 url。我们使用前面步骤中创建的 payload 作为 data 。也可以为该请求使用一个标题并在该标题中给这个相同的 url添加一个参照键。
Python
1
2
3
4
5
result = session_requests.post(
login_url,
data = payload,
headers = dict(referer=login_url)
)
步骤三:爬取内容
现在,我们已经登录成功了,我们将从bitbucket dashboard页面上执行真正的爬取操作。
Python
1
2
3
4
5
url = '/overview'
result = session_requests.get(
url,
headers = dict(referer = url)
)
为了测试以上内容,我们从 bitbucket dashboard 页面上爬取了项目列表。我们将再次使用 xpath 来查找目标元素,清除新行中的文本和空格并打印出结果。如果一切都运行 OK,输出结果应该是你 bitbucket 账户中的 buckets / project 列表。
Python
1
2
3
4
5
tree = html.fromstring(result.content)
bucket_elems = tree.findall(".//span[@class='repo-name']/")
bucket_names = [bucket.text_content.replace("n", "").strip() for bucket in bucket_elems]
print bucket_names
你也可以通过检查从每个请求返回的状态代码来验证这些请求结果。它不会总是能让你知道登录阶段是否是成功的,但是可以用来作为一个验证指标。
例如:
Python
1
2
result.ok # 会告诉我们最后一次请求是否成功
result.status_code # 会返回给我们最后一次请求的状态
Ⅲ selenium:python如何绕过登录页面登录网页
使用场景
在面对需要账号密码登录的网页时,可以通过定位输入框,使用send_keys
输入账号密码登录。
但是在面对某些无法通过页面直接登录的场景,比如需要微信或者软件扫码、验证码等才能进入页面的情况时,就可以通过cookie进行登录。
本文主要介绍通过记录上一次登录网页的cookie,在cookie生效期间直接绕过登录页面直接进入系统的登录方式。
登录页面后获取登录的cookie
读取之前存入的cookie
这样只要记录的cookie生效,那么就可以不用每次进入系统时都需要在登录页面登录啦~
Ⅳ python+selenium时cookie已经写入了为什么还没有绕过登录
应该是没有正确做到
添加 cookie
1.这里需要添加两个cookie,一个是.CNBlogsCookie,另外一个是.Cnblogs.AspNetCore.Cookies。
3.添加cookie后刷新页面,接下来就是见证奇迹的时刻了。
2.20.5 参考代码:
# coding:utf-8
from selenium import webdriver
import time driver = webdriver.Firefox()
driver.get("")
# # 添加cookie c1 = {u'domain': u'.cnblogs.com', u'name': u'.CNBlogsCookie', u'value': u'xxxx', u'expiry': 1491887887, u'path': u'/', u'httpOnly': True, u'secure': False}
c2 = {u'domain': u'.cnblogs.com', u'name': u'.Cnblogs.AspNetCore.Cookies', u'value': u'xxxx', u'expiry': 1491887887, u'path': u'/', u'httpOnly': True, u'secure': False} driver.add_cookie(c1)
# 添加2个值
driver.add_cookie(c2)
time.sleep(3)
# 刷新下页面就见证奇迹了
driver.refresh()
有几点需要注意:
1.登录时候要勾选下次自动登录按钮。
2.add_cookie()只添加name和value,对于博客园的登录是不成功。
3.本方法并不适合所有的网站,一般像博客园这种记住登录状态的才会适合
Ⅳ 如何用 Python 爬取需要登录的网站
可以尝试添加相关cookie来试着去访问。自己先本地登录一下,然后抓取页面cookie,然后构造相应的请求,让他看起来像是登录过的,如果网站验证的不是特别严的话,是可以成功的。
还有一种方法,就是用Selenium框架,他会打开一个浏览器,然后访问指定url。但是还是免不了需要登录一次,但是登录过程,输入账号密码和点击登录按钮都是你可以模拟的。具体你可以参照官方文档。
Ⅵ python中的爬虫如何去爬那些被设置了权限的网站
一般的办法就是去获取这个权限
模拟登录,更换账号,更换ip
怎么反的,就怎么去绕过
多数需要花时间来分析
摸索出反爬虫的策略,采取办法对应
Ⅶ 如何用 Python 爬取需要登录的网站
importrequests
fromlxmlimporthtml
#创建session对象。这个对象会保存所有的登录会话请求。
session_requests=requests.session()#提取在登录时所使用的csrf标记
login_url="https://bitbucket.org/account/signin/?next=/"
result=session_requests.get(login_url)
tree=html.fromstring(result.text)
authenticity_token=list(set(tree.xpath("//input[@name='csrfmiddlewaretoken']/@value")))[0]
payload={
"username":"<你的用户名>",
"password":"<你的密码>",
"csrfmiddlewaretoken":authenticity_token#在源代码中,有一个名为“csrfmiddlewaretoken”的隐藏输入标签。
}
#执行登录
result=session_requests.post(
login_url,
data=payload,
headers=dict(referer=login_url)
)
#已经登录成功了,然后从bitbucketdashboard页面上爬取内容。
url='https://bitbucket.org/dashboard/overview'
result=session_requests.get(
url,
headers=dict(referer=url)
)
#测试爬取的内容
tree=html.fromstring(result.content)
bucket_elems=tree.findall(".//span[@class='repo-name']/")
bucket_names=[bucket.text_content.replace("n","").strip()forbucketinbucket_elems]
print(bucket_names)
Ⅷ python 模拟登录怎么跳过证书认证
如果网站后台有相应的验证是跳不过去的
所以还是需要证书认证的,还需要使用cookie
Ⅸ 如何通过python绕过网站会员
你说的这个和PYTHON有啥关系?
现在都什么年代了,就算是不会做网站的,拿模板生成网站,也不会出现能让你不真正登录就能访问内容得情况。
Ⅹ 如何用python模拟登录一个网站
首先你要清楚整个登录过程,浏览器按F12,查看网络,看看浏览器发生了什么请求,收到了什么回复。
然后用用urllib或requests库发送request就行了。
关于要不要验证码,肯定有那个请求,你没有看到吧?
如果要就会请求验证码,在request里面发送就好了。