python从网站子页面获取数据

时间:2013-09-21 09:01:31

标签: python urllib2

我正在尝试创建一个从Steam获取市场链接但遇到问题的机器人。我能够从单个页面返回所有数据,但是当我尝试获取多个页面时,它只是给了我第一页的副本,虽然我给它工作链接(例如:http://steamcommunity.com/market/search?q=appid%3A753#p1然后{{3} })。我测试了链接,它们在我的浏览器中工作。这是我的代码。

import urllib2
import random
import time

start_url = "http://steamcommunity.com/market/search?q=appid%3A753"
end_page = 3
urls = []

def get_raw(url):
    req = urllib2.Request(url)
    response = urllib2.urlopen(req)
    return response.read()

def get_market_urls(html):
    index = 0
    while index != -1:
        index = html.find("market_listing_row_link", index+25)
        beg = html.find("http", index)
        end = html.find('"',beg)
        print html[beg:end]
        urls.append(html[beg:end])

def go_to_page(page):
    return start_url+"#p"+str(page)

def wait(min, max):
    wait_t = random.randint(min,max)
    time.sleep(wait_t)

for i in range(end_page):
    url = go_to_page(i+1)
    raw = get_raw(url)
    get_market_urls(raw)

1 个答案:

答案 0 :(得分:1)

您的问题是您误解了网址的内容。

标签后面的数字并不意味着它可以获取不同的URL。这称为查询字符串。在该特定页面中,查询字符串向javascript解释了哪个页面可以启动AJAX。 (如果您有兴趣,请阅读HereHere。)。

无论如何,你应该看看网址:http://steamcommunity.com/market/search/render/?query=appid%3A753&start=00&count=10。您可以使用start = 00 & count = 10 参数来获得所需的结果。

享受。