zoukankan      html  css  js  c++  java
  • Python3爬虫爬取淘宝商品数据

    这次的主要的目的是从淘宝的搜索页面获取商品的信息。其实分析页面找到信息很容易,页面信息的存放都是以静态的方式直接嵌套的页面上的,很容易找到。主要困难是将信息从HTML源码中剥离出来,数据和网页源码结合的很紧密,剥离数据有一定的难度。

    然后将获取的信息写入excel表格保存起来,这次只爬取了前面10页 的内容。在运行代码的过程中发现,30页后面的数据有问题,出现了手机价格为0的情况,这是不符合实际的,码也没有写错误处理的代码。

    这次先写个粗略的,有点凌乱的感觉,下次有时间再系统的整理整理吧。

    这是爬取的数据的效果图:

    这是程序的代码:

    import requests
    import re
    from xlwt import Workbook
    import xlrd
    import time
    
    def key_name( number ):
        #获取页面的内容并返回
        name = '手机'
        URL_1 = "https://s.taobao.com/search?ie=utf8&initiative_id=staobaoz_20170905&stats_click=search_radio_all%3A1&js=1&imgfile=&q="
        URL_2 = "&suggest=0_1&_input_charset=utf-8&wq=u&suggest_query=u&source=suggest&p4ppushleft=5%2C48&s="
        URL = ( URL_1 + name + URL_2 + str(number))
        #print(URL)
        res = requests.get( URL )
        return res.text
    
    def find_date( text):
        #根据整个页面的信息,获取商品的数据所在的HTML源码并放回
        reg = r',"data":{"spus":[({.+?)]}},"header":'
        reg = re.compile(reg)
        info = re.findall(reg, text)
        return info[0]
    
    def manipulation_data( info, N, sheet ):
        #解析获取的HTML源码,获取数据
        Date = eval(info)
    
        for d in Date:
            T = " ".join([t['tag'] for t in d['tag_info']])
            #print(d['title'] + '	' + d['price'] + '	' + d['importantKey'][0:len(d['importantKey'])-1] + '	' + T)
            
            sheet.write(N,0,d['title'])
            sheet.write(N,1,d['price'])
            sheet.write(N,2,T)
            N = N + 1
        return N
        
        
    def main():
        
        book = Workbook()
        sheet = book.add_sheet('淘宝手机数据')
        sheet.write(0,0,'品牌')
        sheet.write(0,1,'价格')
        sheet.write(0,2,'配置')
        book.save('淘宝手机数据.xls')
        #k用于生成链接,每个链接的最后面的数字相差48.
        #N用于记录表格的数据行数,便于写入数据
        k = 0
        N = 1
        for i in range(10+1):
            text = key_name( k + i * 48 )
            info = find_date(text)
            N = manipulation_data( info ,N, sheet )
        
            book.save('淘宝手机数据.xls')
            print('下载第' + str(i) + '页完成')
    
    if __name__ == '__main__':
        main()
  • 相关阅读:
    Linux下配置APACHE支持PHP环境
    mysql 管理脚本
    RAC迁移至单机考虑几大因素
    mysql配置文件my.cnf模板
    hadoop 日常问题汇总(持续更新)
    Redis配置文件
    jquery操作select(增加,删除,清空)
    mybatis异常
    Elasticsearch 之 query与filter区别
    在elasticsearch里如何高效的使用filter
  • 原文地址:https://www.cnblogs.com/jxc321/p/7494185.html
Copyright © 2011-2022 走看看