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

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

    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 # 会返回给我们最后一次请求的状态

       

温馨提示:内容为网友见解,仅供参考
第1个回答  2023-08-04
对于需要登录的网站,可以使用Python编写爬虫来模拟登录并进行数据采集。以下是一般的步骤:1. 导入所需的库,如requests、BeautifulSoup等。2. 使用requests库发送POST请求,模拟登录。需要提供登录页面的URL、登录表单的字段和值,以及登录后需要访问的页面URL。3. 在登录请求中,可以使用session来保持登录状态,以便后续的数据采集。4. 使用session发送GET请求,访问需要登录后才能查看的页面,获取所需的数据。5. 使用BeautifulSoup等库解析页面,提取所需的数据。6. 可以将数据保存到本地文件或导入到数据库中,以便后续的数据分析和处理。需要注意的是,不同网站的登录方式和登录表单字段可能会有所不同,需要根据具体的网站进行相应的调整。八爪鱼采集器也提供了模拟登录的功能,可以方便地进行数据采集。八爪鱼为用户准备了一系列简洁易懂的教程,帮助大家快速掌握采集技巧,轻松应对各类网站数据采集,请前往官网教程与帮助了解更多详情。

如何用Python爬取需要登录的网站
步骤一:研究网站 - 打开登录页面:访问Bitbucket的登录页面 "https:\/\/bitbucket.org\/account\/signin"。- 观察登录表单:确保您已经注销,然后查看登录表单的元素。- 提取信息:右键点击“用户名或邮箱”和“密码”字段,选择“检查元素”,以获取对应的name属性值。同时,查找名为“csrfmiddlewaretoken”...

如何用 Python 爬取需要登录的网站
首先,我们要创建 session 对象。这个对象会允许我们保存所有的登录会话请求。Python 1 session_requests = requests.session()第二,我们要从该网页上提取在登录时所使用的 csrf 标记。在这个例子中,我们使用的是 lxml 和 xpath 来提取,我们也可以使用正则表达式或者其他的一些方法来提取这些数据。Python...

Python 爬取https的登录界面,怎么爬取成功,谢谢
password , csrf = 'Gy2O70iSjOTbWhWgBLvf4HDuf4jUe4RP'): url = '\/login\/' values = { 'username' : username, 'password' : password,

python怎么爬取数据
便于我们获取数据四、获取响应获取响应是十分重要的, 我们只有获取了响应才可以对网站的内容进行提取,必要的时候我们需要通过登录网址来获取cookie 来进行模拟登录操作五、获取源码中的指定的数据这就是我们所说的需求的数据内容,

网页需要登录,怎样抓取其内容
网站登录\/认证有多种方式,要抽取/提取需要登录的网页内容,需要实现有针对性的网页抓取软件模块:1,HTTPS 2,HTTP Digest 3,HTTP Basic 4,使用网页Form 其中,前三种是通信协议层面的,如果使用PHP,Python,Javascript, Java等语言编程,一般需要控制HTTP通信做相应的动作;而第四种是应用层面的,只...

Python爬网页
google project网站有一个项目叫做sinawler,就是专门的新浪微博爬虫,用来抓取微博内容。网站上不去,这个你懂的。不过可以百度一下“python编写的新浪微博爬虫(现在的登陆方法见新的一则微博)“,可以找到一个参考的源码,他是用python2写的。如果用python3写,其实可以使用urllib.request模拟构建一个带...

python怎么获取需要登陆的接口的数据?
首先新建一个py文件,导入所需的类库,urllib,json等。2 \/4 声明api的url地址,和构造请求头。3 \/4 使用urlopen方法发起请求并获取返回的数据。4 \/4 最后就是对返回字符串的处理了。比如字符串的截取,字符串的转换成json对象,转换成字段,再获取对应key的值。使用Python3实现HTTP get方法。使用...

python+selenium爬取b站视频(得到登录后的清晰度)+绕过登录
本文介绍使用Python和Selenium库实现对B站视频的爬取。特别是针对需要登录后才能获取的清晰度较高的视频。通过登录B站获取cookie,之后在浏览器中注入该cookie,实现已登录状态下的视频爬取。准备工作中,需安装Python 3.7版本及相应编辑器。确保具备json、os、re、time、requests、BeautifulSoup库。另外,需...

python爬虫之Cookie模拟登录--Cookie模拟登录原理
服务端接收到请求后,通过Cookie中的Session ID识别用户,从而提供个性化内容和服务。总结与应用 通过理解Cookie和Session的原理与作用,我们可以实现自动化登录,进而高效地进行数据抓取。这种方式不仅适用于日常的爬虫应用,特别是在处理需要登录后才能访问的数据时,能显著提高数据获取的效率和可行性。

怎么样python爬虫进行此网站爬取
首先要AES解密,可以【Python:import Crypto.Cipher.AES】包,解密mode是CFB,seed是"userId:"+uid+":seed"的SHA256值,解密的key是seed[0:24],iv是seed[len(seed)-16:]。如果没有登录,uid就是用的"anyone",这时候的seed是"61581AF471B166682A37EFE6DD40FE4700EE337FEEEF65E2C8F203FCA...

相似回答