我想将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页的价格。
发生了什么事,我只是没有看到?
答案 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)
获取动态内容(由客户端代码生成的内容)总是非常棘手。对此没有简单的解决方案,但如果您真的想深入研究,我建议在JavaScript
中PyV8
,Python
引擎。
答案 2 :(得分:1)
Error in pattern when using pattern3 in python 3.6
请点击上面的超链接打开图片 在python3.6环境下执行相同代码的替代方法是什么,因为我必须安装pattern3,python 3.6不支持该模式 谢谢!