【问题标题】:python web scraping: onclick ajax request returns nothing with status 200python web抓取:onclick ajax请求不返回任何状态200
【发布时间】:2017-08-31 23:44:29
【问题描述】:

我正在尝试从网站上抓取表格数据。我想要的数据“隐藏”在 onclick 事件后面。

<a class="text" onclick="javascript:openPAOnSR_RS('some_sku', 'brandname','divId', 'some_args','OPC Page Details');cmTagAndLink('Open Link','OPC Page Details',null,null,null);">The Click</a>

点击后,有一个post请求和下面的一些细节。

Request URL:http://www.somewebsite.com/catalog/tables.do?some_sku=sku&brandKey=brandname&divId=divId
Request Method:POST
Status Code:200 OK
Remote Address:23.xxxxxxxxxxx
Referrer Policy:no-referrer-when-downgrade

所以我编写了如下代码,但它没有返回任何内容。

from urllib.parse import urlencode
from requests.exceptions import RequestException
import requests


def get_page_index():
    string_param = {
        'some_sku': 'sku',
        'brandKey': 'brandname',
        'divId': 'divId'
    }

    url = "http://www.somewebsite.com/catalog/tables.do?" + urlencode(string_param)
    try:
        response = requests.post(url=url, data=string_param)
        if response.status_code == 200:
            print(response.url, response.content)
            return response.text
        return None
    except RequestException as e:
        print(e)

我没有得到任何输出,并且状态显示为 200。我应该如何获取点击事件“背后”的数据?

【问题讨论】:

  • 你能解释一下 onclick 事件是什么时候发生的吗?我理解你请求一个网站,然后你点击然后出现JS对话框,在JS框后面你的数据是可用的;我说的对吗?
  • 是的,没错。所以我有这个网页我正在尝试抓取,并且有一个 onclick 链接将启动一个 JS 对话框。我知道我可以从 JS 框中提取数据,但是如何通过“单击”来启动 JS 对话框?问题是我有多个结构相似的网页,我试图从中提取信息。我想写一个抓取脚本,可以做我的鼠标正在做的“点击”。

标签: python web-crawler python-requests


【解决方案1】:

urllib 只会用html 内容回复你,所以你不能干涉那个网站上的JS 东西,有像robobrowserscrapy 这样的模块,但他们只点击html复选框或按钮。
所以其他选项更可取。

1) Selenium 通过使用Phantom 的无头浏览器。

2) 使用Scrapy + splash

请问您在点击按钮之前执行了哪些步骤?
你在输入一些信息后点击按钮吗?或者您只是在网站出现时单击按钮?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-02
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 2016-06-22
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多