请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师好,这段代码爬的只是单个网页的全部数据吗?我看一个网页上有60条数据,但是只爬到了30条数据,这是为什么呢?

正在回答 回答被采纳积分+3

2回答

NavCat 2018-07-15 23:44:16

同学非常细心,你的代码也没有错,结果也是正确的。原因是京东默认第一页数据时30条,后面他又异步加载了30条数据,你可以通过浏览器的F12查看详细。

https://img1.sycdn.imooc.com//szimg/5b4b6bcb0001034119140854.jpg

0 回复 有任何疑惑可以回复我~
  • 提问者 粒子酱 #1
    那异步加载的30条怎么才能爬到呢?还有一个问题,怎么才能爬到网站上该搜索条件的所有数据呢?
    回复 有任何疑惑可以回复我~ 2018-07-16 13:17:22
  • NavCat 回复 提问者 粒子酱 #2
    这个你要善于分析,找到它的数据源以及多页的数据源。其它页的数据一定是通过接口请求过来的,你看我的截图就会明白了。
    
    再接下来就要分析接口的请求参数,一定有一个是根分页相关的参数,找到规律,这样就可以找到所有的数据了,最后爬下来就行了
    回复 有任何疑惑可以回复我~ 2018-07-16 13:38:06
NavCat 2018-07-15 20:06:47

贴代码,我看看

0 回复 有任何疑惑可以回复我~
  • 提问者 粒子酱 #1
    import requests
    from lxml import html
    
    def spider(sn):
    
        url = 'https://search.jd.com/Search?keyword={0}'.format(sn)
    
        resp = requests.get(url)
    
        resp.encoding = 'utf-8'
    
        # print(resp.encoding)
    
        html_data = resp.text
    
        selector = html.fromstring(html_data)
    
        ul_list = selector.xpath('//div/ul[@class="gl-warp clearfix"]/li')
    
        # print(len(ul_list))
    
        # ul_list = selector.xpath('//div[@id="J_goodsList"]/ul/li')
        #
        print(len(ul_list))
    
        for li in ul_list:
    
            title = li.xpath('div/div[@class="p-name"]/a/@title')
            print(title[0])
    
            link = li.xpath('div/div[@class="p-name"]/a/@href')
            print(link[0])
    
            price = li.xpath('div/div[@class="p-price"]/strong/i/text()')
            print(price[0])
    
            provider = li.xpath('div/div[@class="p-shopnum"]/a/@title')
            print(provider[0])
    
            print('-----------------')
    
    
    
    
    
    
    if __name__ == '__main__':
        spider('9787115428028')
    回复 有任何疑惑可以回复我~ 2018-07-15 22:11:37
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信