私はデータスクレイピングと機械学習に取り組んでいます。私はPythonとScrapingの両方に不慣れです。私はこの特定のサイトをこすり取ろうとしています。
私が監視したところから、彼らはログインと次のページの間にいくつかのスクリプトを実行します。したがって、それらはそれらのテーブルデータを取得します。私は正常にログインでき、セッションで次のページからもデータを取得できます。不足しているのは、間にスクリプトを実行して取得したデータを取得することです。テーブルのデータが必要です
satcat
ページネーションを実現します。以下は私のコードです
import requests
from bs4 import BeautifulSoup
import urllib
from urllib.request import urlopen
import html2text
import time
from requests_html import HTMLSession
from requests_html import AsyncHTMLSession
with requests.Session() as s:
#s = requests.Session()
session = HTMLSession()
url = 'https://www.space-track.org/'
headers = {'User-Agent':'Mozilla/5.0(X11; Ubuntu; Linux x86_64; rv:66.0)Gecko/20100101 Firefox/66.0'}
login_data = { "identity": "",
"password": "",
"btnLogin": "LOGIN"
}
login_data_extra={"identity": "", "password": ""}
preLogin = session.get(url + 'auth/login', headers=headers)
time.sleep(3)
print('*******************************')
print('\n')
print('data to retrive csrf cookie')
#print(preLogin.text)
#soup = BeautifulSoup(preLogin.content,'html.parser')
#afterpretty = soup.prettify()
#login_data['spacetrack_csrf_token'] = soup.find('input',attrs={'name':'spacetrack_csrf_token'})['value']
csrf = dict(session.cookies)['spacetrack_csrf_cookie']
#csrf = p.headers['Set-Cookie'].split(";")[0].split("=")[-1]
login_data['spacetrack_csrf_token'] = csrf
#print(login_data)
# html = open(p.content).read()
# print (html2text.html2text(p.text))
#login_data['spacetrack_csrf_token'] = soup.find('spacetrack_csrf_token"')
#print(login_data)
login = session.post(url+'auth/login',data=login_data,headers=headers,allow_redirects=True)
time.sleep(1)
print('****************************************')
print('\n')
print('login api status code')
print(login.url)
#print(r.url)
#print(r.content)
print('******************************')
print(' ')
print(' ')
print('\n')
print('data post login')
#async def get_pyclock():
# r = await session.get(url)
# await r.html.arender()
# return r
#postLogin = session.run(get_pyclock)
time.sleep(3)
postLogin = session.get(url)
postLogin.html.render(sleep=5, keep_page=True)
ご覧のとおり、requests_htmlライブラリを使用してhtmlをレンダリングしましたが、データの取得に失敗しました。これは私のデータを取得する内部的にjsで実行されるURLです
誰かがそのデータやJavaScriptをスクレイプする方法を手伝ってくれますか?
ありがとうございました :)
あなたはのために行くことができますselenium
。機能がありますbrowser.execute_script()
。これは、スクリプトの実行に役立ちます。お役に立てれば :)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加