1

私は2つの全く異なる方法を試しました。しかし、それでもまだ、私は中loggin後にのみ存在するデータを取得することはできません。リクエストを使用してウェブサイトにログイン

私は要求を使用していずれかの操作を実行しようとしましたが、XPathはヌルに インポート要求lxmlのインポートHTMLから

USERNAME = "xxx" 
PASSWORD = "xxx" 

LOGIN_URL = "http://www.reginaandrew.com/customer/account/loginPost/referer/aHR0cDovL3d3dy5yZWdpbmFhbmRyZXcuY29tLz9fX19TSUQ9VQ,,/" 
URL = "http://www.reginaandrew.com/gold-leaf-glass-top-table" 


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

# Get login csrf token 
result = session_requests.get(LOGIN_URL) 
tree = html.fromstring(result.text) 
# Create payload 
formKey = str((tree.xpath("//*[ @ id = 'login-form']/input/@ value"))) 
FormKeyTxt = "".join(formKey) 
#print(FormKeyTxt.replace("['","").replace("']","")) 

payload = { 
    "login[username]": USERNAME, 
    "login[password]": PASSWORD, 
    "form_key": FormKeyTxt, 
    "persistent_remember_me": "checked" 

} 

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

# Scrape url 
result = session_requests.get(URL, data=payload) 
tree = html.fromstring(result.content) 
bucket_names = tree.xpath("//span[contains(@class, 'in-stock')]/text()") 
print(bucket_names) 
print(result) 
print(result.status_code) 


if __name__ == '__main__': 
main() 

を返します。 IVEは、機械的なスープを使用して別のものを試してみましたが、それでも、それはヌル

import argparse 
import mechanicalsoup 
import urllib.request 
from bs4 import BeautifulSoup 

parser = argparse.ArgumentParser(description='Login to GitHub.') 
parser.add_argument("username") 
parser.add_argument("password") 
args = parser.parse_args() 

browser = mechanicalsoup.Browser() 

login_page = browser.get("http://www.reginaandrew.com/gold-leaf-glass-top-table") 
login_form = login_page.soup.select("#login-form")[0] 


login_form.input({"login[username]": args.username, "login[password]": args.password}) 


page2 = browser.submit(login_form,login_page.url) 
messages = page2.soup.find(class_='in-stock1') 
if messages: 
    print(messages.text) 

print(page2.soup.title.text) 

を返す私はより良いので、IDはそれを使用して、それをしたいが、私は欠けているものがあり、トップのソリューションを理解できますか?

+0

を行う必要がありますあなたは、ウェブサイトの不正scarpingは、電位が違法できることに注意してください。 –

+0

@leafはい、分かります。しかし、これは仕事に関連しており、そうするために私たちに支払っています。心配ありがとう! –

+1

これはSeleniumを使ってみましたか? – Bitonator

答えて

1

(私は多くのことを欠けていると確信している)。これは、それに

import requests 
import re 

url = "http://www.reginaandrew.com/" 
r = requests.session() 
rs = r.get(url) 
cut = re.search(r'<form.+?id="login-form".+?<\/form>', rs.text, re.S|re.I).group() 
action = re.search(r'action="(.+?)"', cut).group(1) 
form_key = re.search(r'name="form_key".+?value="(.+?)"', cut).group(1) 
payload = { 
    "login[username]": "fugees", 
    "login[password]": "nugees", 
    "form_key": form_key, 
    "persistent_remember_me": "on" 
} 
rs = r.post(action, data=payload, headers={'Referer':url}) 
+0

夜遅くにお試しください。ありがとう! –

+0

それは動作します!わーい。 よろしくお願いします。ここで私のコードと違うのは、 "persistent_remember_me"の "on"を持っていることだけです。これは私が間違っていた唯一の場所ですか?もしあなたがそれを指摘できれば、私は感謝しています。 –

+0

私はform_keyが問題であったと信じています。投稿されたデータを簡単に再生し、問題がどこにあるかを判断できます。 – 0x3h

関連する問題