【问题标题】:urlopen always retrieves the same webpageurlopen 总是检索相同的网页
【发布时间】:2012-07-08 03:32:51
【问题描述】:

我正在尝试使用 urllib2、BeautifulSoup 和 Python 2.7 解析网页。

问题出在上游:每次我尝试检索新网页时,都会得到我已经检索到的网页。但是,我的网络浏览器中的页面有所不同:请参阅 page 1page 2。循环页码有问题吗?

这是一个代码示例:

def main(page_number_max):
    import urllib2 as ul
    from BeautifulSoup import BeautifulSoup as bs

    base_url = 'http://www.senscritique.com/clement/collection/#page='

    for page_number in range(1, 1+page_number_max):
        url = base_url + str(page_number) + '/'
        html = ul.urlopen(url)
        bt = bs(html)

        for item in bt.findAll('div', 'c_listing-products-content xl'):
            item_name = item.findAll('h2', 'c_heading c_heading-5 c_bold')
            print str(item_name[0].contents[1]).split('\t')[11]

        print('End of page ' + str(page_number) + '\n')

if __name__ == '__main__':
    page_number_max = 2
    main(page_number_max)

【问题讨论】:

  • 您正在使用哈希参数page 设置页面,但它仅适用于javascript,在您的情况下,我认为您正在使用类似curl 的库来加载页面。查看网站使用 ajax 等加载页面 1 或 2 的 url
  • 请在文件顶部导入。

标签: python python-2.7 beautifulsoup urllib2 urlopen


【解决方案1】:

“#”是用于识别和跳转到文档特定部分的锚标记。浏览器会这样做,因此当您发送请求时会加载整个网页,而忽略其余部分。

【讨论】:

    【解决方案2】:

    当您向服务器发送 http 请求时,“#”字符之后的所有内容都会被忽略。 “#”后面的部分只对浏览器可用。

    如果您在 Chrome 浏览器中打开开发人员工具(或在 Firefox 中打开 firebug),您将看到每次更改 senscritique.com 上的页面时都会向服务器发送请求。这就是您要查找的数据的来源。

    我不会详细说明要发送什么才能从该页面检索数据,因为我认为这与他们的 TOS 不一致。

    【讨论】:

    • 我记得我过去可以使用类似的代码。与此同时,我丢失了代码,我相信网站已更新。这就提出了一个问题:为什么当时它会起作用?
    • 关于TOS,我只是想保存我的评分,以防网站出现故障。
    • 谢谢。多亏了你指着 dièse(锐利)字符,我才能做到。
    猜你喜欢
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    相关资源
    最近更新 更多