【问题标题】:In Python, how can I request specific data from a dynamically loaded website?在 Python 中,如何从动态加载的网站请求特定数据?
【发布时间】:2014-07-18 03:19:49
【问题描述】:

我想将页面从 PeoplePerHour.com 加载到 python 中以运行一些数据分析,但它不断从我没有要求的页面获取数据,我认为它必须转到主页然后以某种方式刷新到我要求的页面。

例如: 我想从http://www.peopleperhour.com/freelance/data+analyst的所有用户那里提取价格,数据跨越多个页面。

假设我想请求第 2 页,http://www.peopleperhour.com/freelance/data+analyst#page=2。如果我在浏览器中进入这里,它可以正常工作并拉出第 2 页,但我认为它会先拉出第 1 页,然后“刷新”到第 2 页(我认为)。如果我在 python 中访问它,它会从第一页加载 HTML,并且永远不会看到第 2 页。

这是我的代码:

import requests
from pattern import web
import re
import pandas as pd

def list_of_prices(url):
    html = requests.get(url).text
    dom = web.DOM(html)
    list = []
    for person in dom('.freelancer-list-item .medium.price-tag'):
        currency = person('sup')
        amount = person('span')
        list.append([currency[0].content if currency else 'na', amount[0].content if amount else 'na'])
    return list

list_of_prices('http://www.peopleperhour.com/freelance/data+analyst#page=2')

无论如何,这将返回第 1 页的价格。

发生了什么我只是没看到?

【问题讨论】:

    标签: php python html request


    【解决方案1】:

    如果我理解正确,您想遍历页面。如果是这种情况,我认为问题出在您的网址上。

    这是您提供的网址: http://www.peopleperhour.com/freelance/data+analyst#page=2

    问题是,“页面”不是该页面上的书签。当您使用#page=2 时,它会告诉浏览器下到同一页面以获取名为“page=2”的书签。

    这是该站点中“下一步”按钮的 URL: http://www.peopleperhour.com/freelance/data+analyst?sort=most-relevant&page=2

    您会看到它显示“&page=2”,这意味着其他内容。在他们的代码中,“page”是一个通过 url 传递的变量,值为 2。如果有多个这些变量,则使用“&”。另外,您缺少一个“?”象征。如果你通过 URL 传递变量,你必须放一个 ?后跟变量的名称=值对。

    所以,很容易解决,把你的网址改成这样:

    http://www.peopleperhour.com/freelance/data+analyst?page=2
    

    与您的旧网址相比:

    http://www.peopleperhour.com/freelance/data+analyst#page=2
    

    作为快速测试,请在您的网络浏览器上复制/粘贴更正后的网址。您现在会在第 2 页看到它。

    【讨论】:

      【解决方案2】:

      获取动态内容(由客户端代码生成的内容)总是非常棘手。对此没有简单的解决方案,但如果你真的想深入研究它,我推荐PyV8Python 中的JavaScript 引擎。

      【讨论】:

        【解决方案3】:

        Error in pattern when using pattern3 in python 3.6

        请点击以上超链接打开图片 在 python3.6 环境下执行相同代码的替代方法是什么,因为因此我必须安装 pattern3,python 3.6 不支持该模式 谢谢!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-05-22
          • 2020-03-27
          • 2018-01-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多