在Python中,如何从动态加载的网站请求特定数据?

时间:2014-07-18 03:19:49

标签: php python html request

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

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

说我想要求第2页http://www.peopleperhour.com/freelance/data+analyst#page=2。如果我在浏览器中访问它,它可以正常工作并提取第2页,但我认为它首先拉出第一页然后再刷新#34;进入第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页的价格。

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

3 个答案:

答案 0 :(得分:3)

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

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

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

以下是该网站中“下一步”按钮的网址: 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页看到它。

答案 1 :(得分:1)

获取动态内容(由客户端代码生成的内容)总是非常棘手。对此没有简单的解决方案,但如果您真的想深入研究,我建议在JavaScriptPyV8Python引擎。

答案 2 :(得分:1)

Error in pattern when using pattern3 in python 3.6

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