1

このチュートリアルに従っていますが、Python を実行しているときにデータを取得できないようです。HTTP ステータス コード 200 を受け取り、status.ok真の値を返します。どんな助けでも素晴らしいでしょう。ターミナルでの私の応答は次のようになります。

[]

200

True

import requests
from lxml import html

USERNAME = "username@email.com"
PASSWORD = "legitpassword"

LOGIN_URL = "https://bitbucket.org/account/signin/?next=/"
URL = "https://bitbucket.org/dashboard/overview"

def main():
session_requests = requests.session()

# Get login csrf token
result = session_requests.get(LOGIN_URL)
tree = html.fromstring(result.text)
authenticity_token = list(set(tree.xpath("//input[@name='csrfmiddlewaretoken']/@value")))[0]

# Create payload
payload = {
    "username": USERNAME, 
    "password": PASSWORD, 
    "csrfmiddlewaretoken": authenticity_token
}

# Perform login
result = session_requests.post(LOGIN_URL, data = payload, headers = dict(referer = LOGIN_URL))

# Scrape url
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_elem.text_content().replace("\n", "").strip() for bucket_elem in bucket_elems]

print bucket_names
print result.status_code

if __name__ == '__main__':
main()
4

1 に答える 1

1

xpath が間違っています。クラス repo-name にスパンがありません。次のようにアンカー タグからリポジトリ名を取得できます。

bucket_elems = tree.xpath("//a[@class='execute repo-list--repo-name']")
bucket_names = [bucket_elem.text_content().strip() for bucket_elem in bucket_elems]

チュートリアルが作成されてから、html は明らかに変更されています。

于 2016-05-11T21:46:17.777 に答える