python爬虫(淘宝家电)

需求:获取淘宝电厂的商品标题、图片、价格等信息,并存入数据库。

接口分析:
1、通过页面的 url 无法直接获取到商品的相关信息,通过浏览器的开发者工具(F12)里的Network查找到带有数据的接口;
在这里插入图片描述
2、测试获取后,仅获取到部分数据,初步分析后发现,淘宝电厂页面的商品信息共计7部分,分为3个接口进行传递,另外两个接口文件通过下拉可获取;

3、信息获取需要分三个接口分别请求,获取速度较慢,而且每次获取到的信息杂质较多。

4、获取到的信息为 json 格式,获取到后可转为字典格式,使用字典的get方法获取到。

5、经过三个接口的对比,发现接口所包含的信息仅有7部分为所需数据,在字典内的键分别为[‘1870316’, ‘1870321’, ‘1870333’, ‘1870340’, ‘1870341’, ‘1870342’,‘1870343’]
在这里插入图片描述
6、在对比三个接口的url时发现,url携带的参数 callback 、tce_sid 、tce_vid 为关键参数,其他参数均为干扰参数,可以删除,且tce_sid为字典中有效数据的键,tce_vid的参数个数与tce_sid相对应,经过优化后将三个接口拼接为一个接口,可以一次访问到所有有效数据。
在这里插入图片描述
7、成功获取到页面所有的有效数据,并存入数据库。
在这里插入图片描述
代码:

#导入模块
import requests
import re
import json
import pymysql

# 连接数据库 创建操作数据库的对象
conn = pymysql.connect('localhost','root','root','test',charset='utf8')
cursor = conn.cursor()

# 插入数据库函数
def insert_mysql(data):

    # 获取想要的数据
    price = float(data.get('item_current_price'))
    pic = data.get('item_pic')
    title = data.get('item_title')
    
    #sql语句
    sql = f'insert into taobao_digital (price,title,pic) value ({price},"{title}","{pic}")'
	
	#执行sql语句 并提交
    cursor.execute(sql)
    conn.commit()


if __name__ == "__main__":

    # 声明url并发起请求
    base_url = 'https://tce.taobao.com/api/mget.htm?tce_sid=1870316,1870321,1870333,1870340,1870341,1870342,1870343&tce_vid=2,2,2,2,2,2,2'
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
    }
    
    response = requests.get(base_url, headers=headers)
    json_data = response.text

    # 正则匹配我们想要的数据
    pattern = re.compile('{.*}')
    json_data_str = pattern.search(json_data).group()

    # json数据分析 我们想要的数据
    need_list = ['1870316', '1870321', '1870333', '1870340', '1870341', '1870342', '1870343']
    
    # 字符串转换为字典
    json_data_dict = json.loads(json_data_str)
 	
 	#循环字典列表
    for number in need_list:
        data_list = json_data_dict.get('result').get(number).get('result')

        for item in data_list:
        
            # 拼接完整的图片url
            item_pic = item.get('item_pic')
            full_item_pic = 'https:' + item_pic
            item['item_pic'] = full_item_pic
            
            # 删除掉我们不需要的元素
            del item['item_url']
            del item['_sys_point_local']
            print(count, item)
            insert_mysql(item)

    # 关闭数据库
    cursor.close()
    conn.close()

猜你喜欢

转载自blog.csdn.net/douyaoxin_126/article/details/86183452
今日推荐