【问题标题】:How to forcefully execute or render a script in browser from python in scraping?python - 如何在抓取中从python强制执行或呈现浏览器中的脚本?
【发布时间】:2019-12-06 17:18:17
【问题描述】:

我正在研究数据抓取和机器学习。我对 Python 和 Scraping 都很陌生。我正在尝试抓取这个特定的网站。

https://www.space-track.org/

根据我的监控,他们在登录和下一页之间执行了几个脚本。因此他们得到了那些表数据。我能够成功登录,然后通过会话从下一页获取数据,我缺少的是获取他们从执行脚本中获取的数据。我需要表格中的数据

卫星猫

并实现分页。以下是我的代码

 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,它获取我的数据

https://www.space-track.org/master/loadSatCatData

任何人都可以帮助我如何抓取该数据或 javascript 吗?

谢谢你:)

【问题讨论】:

标签: python web-scraping scrapy python-requests html-rendering


【解决方案1】:

你可以去selenium。它有一个函数browser.execute_script()。这将帮助您执行脚本。希望这会有所帮助:)

【讨论】:

  • 它会执行所有的脚本吗?
  • 是的,我想是的。我从来没有遇到任何错误。我还没有阅读文档tbh。我是根据我的个人经验建议的。
  • 谢谢,我对 selenium 的担忧是,如果我想将此代码作为脚本发送给其他人,我将如何发送驱动程序?你能解释一下吗?
  • 您可以轻松地在工作目录中添加 chrome 驱动程序并发布该目录。如果您关心的是生产,那么您可以使用 pyinstaller 将 python 脚本转换为可执行文件
  • 那太好了,谢谢你,会努力让你知道的:)
猜你喜欢
  • 2023-03-07
  • 1970-01-01
  • 2022-11-18
  • 2014-06-29
  • 2017-02-25
  • 2020-04-19
  • 1970-01-01
  • 2021-09-21
  • 2019-05-24
相关资源
最近更新 更多