如何用 Python 爬取需要登录的网站

作者&投稿:主父奖 (若有异议请与网页底部的电邮联系)
如何用 Python 爬取需要登录的网站~

post获取COOKIE,然后带着COOKIE去爬

import requestsfrom lxml import html# 创建 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))# 已经登录成功了,然后从 bitbucket dashboard 页面上爬取内容。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() for bucket in bucket_elems] print(bucket_names)

最近我必须执行一项从一个需要登录的网站上爬取一些网页的操作。它没有我想象中那么简单,因此我决定为它写一个辅助教程。

在本教程中,我们将从我们的bitbucket账户中爬取一个项目列表。

教程中的代码可以从我的 Github 中找到。

我们将会按照以下步骤进行:

提取登录需要的详细信息
执行站点登录
爬取所需要的数据

在本教程中,我使用了以下包(可以在 requirements.txt 中找到):

Python
requests
lxml
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” 的隐藏输入值)。列如:“Vy00PE3Ra6aISwKBrPn72SFml00IcUV8”。

最后我们将会得到一个类似这样的字典:

Python
payload = {
"username": "<USER NAME>",
"password": "<PASSWORD>",
"csrfmiddlewaretoken": "<CSRF_TOKEN>"
}
1
2
3
4
5

payload = {
"username": "<USER NAME>",
"password": "<PASSWORD>",
"csrfmiddlewaretoken": "<CSRF_TOKEN>"
}

请记住,这是这个网站的一个具体案例。虽然这个登录表单很简单,但其他网站可能需要我们检查浏览器的请求日志,并找到登录步骤中应该使用的相关的 key 值和 value 值。


门源回族自治县18610963948: 如何用 Python 爬取需要登录的网站 -
字中艾迪: 登录,主要是cookie会保存session id来表示身份. 你需要处理登录返回的HTTP头,Set-Cookie头中包含了需要设置的cookie信息. 然后,你登录后,访问所有地址时需要在你的HTTP请求报文头部中加入Cookie头、设置之前服务器返回的cookie值. 以上只是最简单的登录处理,如果有验证码,那就不在这个讨论范围内了,属于图像识别的领域了.

门源回族自治县18610963948: python爬虫需要登录怎么办 -
字中艾迪: 一般登录都是post用户登录信息 可以用python模拟登录并保存cookie,然后就可以抓取了

门源回族自治县18610963948: python怎样爬取整站 -
字中艾迪: 如果是python2.7,利用urllib和urllib2进行爬取,对于要爬取的网站,需要做一些分析,比如要爬取的内容是登录后才看得到的,那就先要实现模拟登陆,再进行爬取.爬取时一般是发起get请求,携带的参数可以通过浏览器的开发者模式分析网页请求来查看.如果是python3,原理也差不多,用的模块稍微不一样一些

门源回族自治县18610963948: Python 爬取https的登录界面,怎么爬取成功,谢谢 -
字中艾迪: 之前写的一直没成功,原因是用的不是HTTPS相关的函数.这次仔细研究了一下,有几个需要注意的点,一个是POST模拟登陆的时候,header中的cookie值,不同的网站应该会有不同的要求;另一个是GET页面的时候,是需要加上POST得到...

门源回族自治县18610963948: [求助] 请问python抓取网页需要登录,怎么寻找post data? -
字中艾迪: 大部分是POST,也有使用GET传递的,就是加到URL后面?参数1=值1&....这种形式,就是需要抓包分析,特别注意cookie的设置,写代码要模拟到位,headers、user-agent等这些信息都要模拟,还有就是分析JS对input的处理,有的加密之后进行传递的.

门源回族自治县18610963948: 怎样用Python设计一个爬虫模拟登陆知乎 -
字中艾迪: 两种方法: 1. 带cookielib和urllib2 import urllib2 import urllib import cookielibdef login():email = raw_input("请输入用户名:")pwd = raw_input("请输入密码:")data={"email":email,"password":pwd}post_data=urllib.urlencode(...

门源回族自治县18610963948: python 爬虫怎么实现登陆 -
字中艾迪: 抓取网页所有url的简单Python爬虫源码,只用到了一个Python标准库urllib模块

门源回族自治县18610963948: 如何用Python修改需要需要登录的网站的信息 -
字中艾迪: 大致的思路是先抓包,分析登陆包以及服务器返回的数据包的内容,然后用Python写.可以使用urllib2,cookiejar,beautifulsoup(这个用来分析网页,当然,自己用正则构造一个类效率会更高)这几个类.

门源回族自治县18610963948: 请问【已解决】Python中如何获得访问网页所返回的cookie -
字中艾迪: 需要先获得最开始登陆的百度空间网页所返回的cookie. 【解决过程】 1.搜了一番,最后参考这个: 利用Python抓取需要登录网站的信息 实现了对应的代码:

门源回族自治县18610963948: python怎样爬取带验证码的网页 -
字中艾迪: 如果只是为了登录,你可以把验证码图片打出来,看出来验证码之后输入进交互界面,然后连同用户名密码一起post,登录,如果想大量识别验证码,就需要分析验证码的难易程度,简单一些的可以模式识别,或者神经网络,复杂的就不行了

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网