1

我正在尝试使用 python 抓取 etherscan 站点的某个部分,因为没有用于此功能的 api。基本上去这个链接,一个人需要按下验证,这样做之后会出现一个弹出窗口,你可以在这里看到。我需要刮掉的是这部分0x0882477e7895bdc5cea7cb1552ed914ab157fe56,以防消息以图片中所示的消息开头。

我编写了下面的 python 脚本来启动它,但我不知道如何与站点进行进一步交互,以便让该弹出窗口出现在前台并抓取信息。这可能吗?

from bs4 import BeautifulSoup
from requests import get

headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0','X-Requested-With': 'XMLHttpRequest',}
url = "https://etherscan.io/proxyContractChecker?a=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"
response = get(url,headers=headers )
soup = BeautifulSoup(response.content,'html.parser')

谢谢你

4

2 回答 2

1
import requests
from bs4 import BeautifulSoup


def Main(url):
    with requests.Session() as req:
        r = req.get(url, headers={'User-Agent': 'Ahmed American :)'})
        soup = BeautifulSoup(r.content, 'html.parser')
        vs = soup.find("input", id="__VIEWSTATE").get("value")
        vsg = soup.find("input", id="__VIEWSTATEGENERATOR").get("value")
        ev = soup.find("input", id="__EVENTVALIDATION").get("value")
        data = {
            '__VIEWSTATE': vs,
            '__VIEWSTATEGENERATOR': vsg,
            '__EVENTVALIDATION': ev,
            'ctl00$ContentPlaceHolder1$txtContractAddress': '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
            'ctl00$ContentPlaceHolder1$btnSubmit': "Verify"
        }
        r = req.post(
            "https://etherscan.io/proxyContractChecker?a=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", data=data, headers={'User-Agent': 'Ahmed American :)'})
        soup = BeautifulSoup(r.content, 'html.parser')
        token = soup.find(
            "div", class_="alert alert-success").text.split(" ")[-1]
        print(token)


Main("https://etherscan.io/proxyContractChecker")

输出:

0x0882477e7895bdc5cea7cb1552ed914ab157fe56
于 2020-03-27T07:08:17.083 回答
0

我不同意@InfinityTM。通常此类问题遵循的工作流程是您需要向网站发出 POST 请求。

看,如果你点击验证一个 POST 请求进入网站,如下图所示:

点击验证后

POST请求是使用此标头发出的:

请求标头

并使用此参数

参数

您需要弄清楚如何使用正确的 URL、标头、参数和 cookie发送此POST请求。完成请求后,您将收到响应

回复

其中包含您要在div 下使用类“alert alert-success抓取的信息:

概括

因此,您需要遵循的步骤是:

  1. 导航到您的网站,并收集POST请求所需的所有信息(请求 URL、Cookie、标头和参数)。
  2. 使用请求库发出请求。
  3. 一旦你得到 <200> 响应,用 BS抓取你感兴趣的数据。

请让我知道这是否为您指明了正确的方向!:D

于 2020-03-27T06:47:48.980 回答