刮掉Flipkart.com的所有手机

时间:2012-12-08 08:15:16

标签: python web-scraping beautifulsoup

我正试图从www.flipkart.com抓取所有手机。现在,我想到的是我可以从这里刮掉所有手机。

http://www.flipkart.com/mobiles/pr?p[]=sort%3Dprice_asc&sid=tyy%2C4io&layout=grid 

现在问题是,在这个网站上我必须按显示更多结果'看到更多结果。但是,我怎么能用代码呢?我在python中使用BeautifulSoup包。

我的代码到现在为止:

import bs4
import re
import urllib2
import sys

link = 'http://www.flipkart.com/mobiles/pr?p[]=sort%3Dprice_asc&sid=tyy%2C4io&layout=grid'
response = urllib2.urlopen(link)
thePage = response.read()
soup = bs4.BeautifulSoup(thePage)
allMobiles = soup.find('div', attrs={'id': 'products'})

我只输出输出的第一页?如何访问其他页面?

1 个答案:

答案 0 :(得分:7)

您可以使用get参数。常规网址是:

http://www.flipkart.com/mobiles/pr?p [] =%排序&3Dprice_asc放大器; SID = TYY%2C4io&安培;布局=格

点击“更多结果”按钮(或向下滚动)后,使用带有以下网址的AJAX加载下一页:

http://www.flipkart.com/mobiles/pr?p%5B%5D=sort%3Dprice_asc&sid=tyy%2C4io&layout=grid&start=41&ajax=true

网址由以下部分组成:

如果你想要所有手机,只需增加'开始'参数即可。像这样:

item_count = 600
for i in range(0, item_count, 40):
    link = "http://www.flipkart.com/mobiles/pr?p%5B%5D=sort%3Dprice_asc&sid=tyy%2C4io&layout=grid&ajax=true&start=%d" % (i+1)

    // Do something with the link
    print link

享受, Wout的