【问题标题】:How To Webscrape A Page With Javascript Using Python?如何使用 Python 使用 Javascript 抓取网页?
【发布时间】:2022-01-24 01:57:29
【问题描述】:

遇到了一些麻烦,似乎无法解决这个问题......

我正在尝试抓取下面的 URL 以获取正文,但由于 Javascript 似乎我遇到了问题。有人对如何提取文本有建议/想法吗?这甚至可能吗?最好使用什么库?

https://www.solanalysis.com/

【问题讨论】:

  • 你能分享一下你到目前为止的尝试吗?
  • 您根本没有向我们提供任何关于如何进行抓取的详细信息。如果我们不知道您在做什么,我们无法提出建议。

标签: python python-3.x web-scraping beautifulsoup


【解决方案1】:

我会使用直接获取数据的 XHR 请求:

import requests
import pandas as pd

url = 'https://solanalysis-graphql-dot-feliz-finance.uc.r.appspot.com/'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'}
payload = {"operationName":"GetProjectStatsQuery",
           "variables":{"pagination_info":{"page_number":1,"page_size":100},
             "conditions":{},
             "order_by":[{"field_name":"market_cap","sort_order":"DESC"}]},
           "query":"query GetProjectStatsQuery($conditions: GetProjectStatsCondition, $order_by: [OrderConfig!], $pagination_info: PaginationConfig) {\n  getProjectStats(\n    conditions: $conditions\n    order_by: $order_by\n    pagination_info: $pagination_info\n  ) {\n    project_stats {\n      project_id\n      market_cap\n      volume_7day\n      volume_1day_change\n      floor_price\n      average_price\n      average_price_1day_change\n      max_price\n      twitter_followers\n      num_of_token_listed\n      project {\n        supply\n        website\n        img_url\n        display_name\n        __typename\n      }\n      __typename\n    }\n    pagination_info {\n      total_page_number\n      current_page_number\n      has_next_page\n      current_page_size\n      __typename\n    }\n    __typename\n  }\n}\n"}

jsonData = requests.post(url, headers=headers, json=payload).json()


df = pd.DataFrame(jsonData['data']['getProjectStats']['project_stats'])

输出:

print(df.head(5).to_string())
             project_id  market_cap  volume_7day  volume_1day_change  floor_price  average_price  average_price_1day_change  max_price  twitter_followers  num_of_token_listed                                                                                                                                                                                                                                                     project   __typename
0  shadowysupercoderdao   117666155       788363             -0.0510        115.0     119.822968                    -0.0085     133.00              30267                   57                                {'supply': 10000, 'website': 'https://genesysgo.com/', 'img_url': 'https://storage.googleapis.com/feliz-crypto/project_photos/shadowysupercoderdao.png', 'display_name': 'Shadowy Super Coder DAO', '__typename': 'Project'}  ProjectStat
1                   smb    82297085      1119240             -0.0572        137.0     167.117647                     0.0259     555.00              76989                  654                                                  {'supply': 5000, 'website': 'https://market.solanamonkey.business', 'img_url': 'https://storage.googleapis.com/feliz-crypto/smb.jpg', 'display_name': 'Solana Monkey Business', '__typename': 'Project'}  ProjectStat
2              degenape    47488440       432058             -0.0175         36.0      48.349231                    -0.0283     130.00              95024                 1487  {'supply': 10000, 'website': 'https://www.degenape.academy/', 'img_url': 'https://storage.googleapis.com/feliz-crypto/degenape/small/127RACV8SfCbbVrLdRbukh63zCDcubW4xVGh6aV6pnZi.jpg', 'display_name': 'Degenerate Ape Academy', '__typename': 'Project'}  ProjectStat
3        boryokudragonz    30880912       921541              0.1739        280.0     221.028112                     0.0342     269.69              18831                   12                                           {'supply': 1111, 'website': 'https://boryokudragonz.io/', 'img_url': 'https://storage.googleapis.com/feliz-crypto/project_photos/boryokudragonz.png', 'display_name': 'Boryoku Dragonz', '__typename': 'Project'}  ProjectStat
4                aurory    26850233       257762             -0.0401         22.0      27.342396                    -0.0001      28.90             178981                 1073                                                                           {'supply': 10000, 'website': 'https://app.aurory.io', 'img_url': 'https://storage.googleapis.com/feliz-crypto/aurorylogo.png', 'display_name': 'Aurory', '__typename': 'Project'}  ProjectStat

【讨论】:

  • 非常感谢!我爱你。
  • hisit.com如何做同样的提取工作信息?
【解决方案2】:

你有两个选择:

  1. 您可以使用Selenium 抓取由Javascript 加载的数据。
  2. 您可以浏览页面上的 XHR 请求并了解数据是如何在页面上加载的。例如,也许您可​​以选择使用简单的 requests 库自己发送此 XHR 请求,并获取所需的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-24
    相关资源
    最近更新 更多