抓取 Flipkart.com 的所有手机



我正在尝试从 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'})

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

你可以使用 get 参数。常规网址为:

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

点击"更多结果"按钮(或向下滚动)后,将使用 AJAX 加载下一页,网址如下:

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

该网址由以下部分组成:

  • 路径: http://www.flipkart.com/mobiles/pr
  • 查询字符串
    • p[]: 排序=price_asc
    • 希德:泰伊,4io
    • 布局:网格
    • 开始: 41
    • 阿贾克斯:真

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

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

享受沃特

最新更新