selenium爬取淘宝数据时,存入mysql的数据不匹配(小白求救)

  • 爬到140条数据时,存入mysql只有92条
  • 爬到680条数据时,存入mysql只有224条
  • 而且报了一个错误,找不到解决方法

     

您可以少爬点数据 然后将爬到的数据和 成功存入数据库的数据进行对比 看看能不能找到是那些没被存入进去

看您提供的Navicat截图 您是使用的char存文本的 猜测可能是 爬取的内容长度超过了 char能存的最大长度 即溢出

您可以使用 text类型 来存储文本

第95行下面添加一句,if  i>=len(shop_name_list) break;

# -*- coding:utf-8 -*-
from time import sleep
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from bs4 import BeautifulSoup
import pymysql
from matplotlib import pyplot as plt
import lxml

def login_info():
    #通过扫码的形式去登录淘宝账号
    browser.find_element_by_xpath('//*[@id="login"]/div[1]/i').click()
    sleep(5)
    #点击淘宝首页
    taobao_index = browser.find_element_by_xpath('//*[@id="J_SiteNavHome"]/div/a')
    taobao_index.click()
    sleep(1)
def search_product(value):
    # 标签定位
    search_input = browser.find_element_by_id('q')
    # 标签交互
    search_input.send_keys(value)
    # 执行一组js程序,拉到页面底部
    browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
    sleep(2)
    # 点击搜索按钮
    btn = browser.find_element_by_css_selector('.btn-search')
    btn.click()
def data(value):


    # 执行一组js程序,拉到页面底部
    browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
    sleep(2)
    global shop_name_list, shop_price_list, shop_people_list, shop_location_list,a
    shop_name_list = []
    shop_price_list = []
    shop_people_list = []
    shop_location_list = []
    a = 0
    b = 44
    for i in range(1,6):
        page = browser.page_source
        soup = BeautifulSoup(page, 'lxml')
        shop_data_list = soup.find('div', class_='grid g-clearfix').find_all_next('div', class_='items')
        for shop_data in shop_data_list:
            # 商品名称
            shop_image_data = shop_data.find_all('div',class_='pic')
            for shop_data_a in shop_image_data:
                shop_data_a = shop_data_a.find_all('a',class_='pic-link J_ClickStat J_ItemPicA')
                for shop_name in shop_data_a:
                    shop_name = shop_name.find_all('img')[0]['alt']
                    shop_name_list.append(shop_name)
            # 商品价格
            shop_price_data = shop_data.find_all('div',class_='price g_price g_price-highlight')
            for shop_price in shop_price_data:
                shop_price_list.append(shop_price.text.strip())
            # 付款人数
            shop_people_number_data = shop_data.find_all('div',class_='deal-cnt')
            for shop_people_number in shop_people_number_data:
                shop_people_list.append(shop_people_number.text)
            #地址s
            shop_location_data = shop_data.find_all('div',class_='location')
            for shop_location in shop_location_data:
                shop_location_list.append(shop_location.text)

        shop_data = zip(shop_name_list,shop_price_list,shop_people_list,shop_location_list)
        for data in shop_data:
            print(data)
            a += 1
        b += 44
        browser.get(f"https://s.taobao.com/search?q={value}&s={b}")
        sleep(0.5)

    print('已成功爬取:%s条信息'%a)
    # print(shop_price_list)
    return shop_name_list, shop_price_list, shop_people_list, shop_location_list,a
def mysql():
    # 连接数据库
    db = pymysql.connect(
        host='localhost',
        user='root',
        password='123456',
        database='dbtest',
        port=3306,
        charset='utf8',
        cursorclass=pymysql.cursors.DictCursor
    )
    cursor = db.cursor()
    # 如果表存在则删除
    cursor.execute("drop table if exists taobao")

    sql = "create table taobao (shop_name char(200) not null ,price char(30),people_number char(30),location char(50))"
    cursor.execute(sql)
    for i in range(a):
        li_name = shop_name_list[i]
        li_price = shop_price_list[i]
        li_people = shop_people_list[i]
        li_location = shop_location_list[i]
        sql = f"insert into taobao(shop_name,price,people_number,location) value('{li_name}','{li_price}','{li_people}','{li_location}')"
        # 执行sql语句
        cursor.execute(sql)
        # 提交到数据库执行
        db.commit()
    db.close()



if __name__ == '__main__':
    value = input("请输入你要查询的关键词:")
    browser = webdriver.Chrome(executable_path='./chromedriver')

    taobao_index = browser.get('https://login.taobao.com/member/login.jhtml')
    # 窗口最大化
    browser.maximize_window()
    wait = WebDriverWait(browser, 10)
    login_info()

    search_product(value)
    data(value)
    mysql()





 

爬到的数据有一些不符合要求,解析出来少了,就会导致这种问题,可以仔细看看错误的数据长什么样,添加规则来避免

('上海三牛万年青饼干3斤鲜葱酥葱香味椒盐苏', '¥13.80', '3931人付款', '江苏 泰州')
('英氏(Enoulite) 小小馒头90g/罐*2罐 2口味 宝宝零食辅食 饼干', '¥90.00', '7人付款', '江苏 南京')
('英氏(Enoulite) 小小馒头特浓牛奶味90g/罐 宝宝零食辅食 饼干', '¥23.80', '36人付款', '江苏 南京')
('莎布蕾武士曲奇饼干网红爆款夹心爆浆饼干多口味零食小吃休闲食品', '¥11.80', '3.0万+人付款', '浙江 嘉兴')
('卜珂海苔薄脆小饼干小包装袋装香酥酥脆早餐网红零食饼干小吃', '¥9.50', '4.0万+人付款', '山东 枣庄')
('甜苦瓜日式小圆饼干天日盐小圆饼网红植物油海盐麦芽饼干休闲零食', '¥9.30', '1.0万+人付款', '广东 佛山')
('豫吉小葫芦饼干小奇福雪花酥专用原材料烘培手工家用零食整箱散装', '¥9.90', '23人付款', '上海')
('【进口】马来西亚马奇新新巧克力涂层夹心饼干20g网红零食曲奇1元', '¥2.00', '1.0万+人付款', '上海')
('友臣美食肉松饼礼盒整箱宿舍充饥零食夜宵糕点健康早餐饼干面包', '¥44.80', '1.5万+人付款', '福建 泉州')
('【三只松鼠_薄脆饼干308g】休闲食品代餐零食小吃小包装海苔脆片', '¥16.90', '2.5万+人付款', '安徽 芜湖')
('小赞雪花酥网红零食小吃休闲食品饼干整箱蔓越莓网红蛋糕点沙琪玛', '¥5.00', '4.0万+人付款', '浙江 杭州')
('网红日式小圆饼干散装日本多口味海盐代早餐零食小吃休闲食品整箱', '¥13.90', '5000+人付款', '浙江 温州')
('江中 江中猴姑饼干20天装960g酥性零食猴头菇饼干猴菇早餐代餐', '¥99.00', '5500+人付款', '上海')
('小赞日式小圆饼海盐零食品休闲小吃散装夜宵充饥小包装多口味饼干', '¥2.90', '8000+人付款', '浙江 杭州')
('【三只松鼠_日式小圆饼100gx3袋】网红休闲小吃零食充饥饼干', '¥12.90', '9500+人付款', '安徽 芜湖')
('莎布蕾零食大礼包武士曲奇饼干网红零食小吃好吃送礼零食组合整箱', '¥99.00', '1947人付款', '浙江 嘉兴')
('【进口】Knoppers德国牛奶榛子巧克力5层网红零食威化饼干250g*2', '¥94.90', '7000+人付款', '上海')
('卜珂零点网红冰淇淋曲奇饼干礼盒装580g休闲办公零食小花曲奇饼干', '¥69.90', '1383人付款', '山东 枣庄')
('奥利奥夹心饼干原味696g*2盒休闲零食亿滋小开心表情包早餐小吃', '¥49.90', '7500+人付款', '上海')
('友臣美食肉松饼干整箱750g营养早餐宿舍充饥夜宵零食休闲糕点小吃', '¥29.90', '2910人付款', '福建 泉州')
('【进口】比利时Lotus和情缤咖时焦糖饼干50片312.5g*2咖啡伴手礼', '¥57.90', '3493人付款', '上海')
('法丽兹抹茶饼干组合女生宿舍耐吃的解馋小零食充饥夜宵 整箱食品', '¥10.10', '3人付款', '安徽 合肥')
('【官方正品】suka酥咔饼干营养代餐饱腹低纸脂小纤菇芭巴尖瘦比兔', '¥388.00', '1010人付款', '广东 广州')
('良品铺子酥脆薄饼干零食散装多口味小饼干小包装零食网红爆款600g', '¥25.80', '8.0万+人付款', '湖北 武汉')
('变啦脂营养代餐饼干老虎官网正品健康科技指定营养餐糖吧变啦伴侣', '¥580.00', '757人付款', '上海')
('【官方正品】suka酥咔饼干营养代餐特膳低饱苏脂咔网顽固型小纤菇', '¥388.00', '173人付款', '辽宁 沈阳')
('孕妇零食无添加糖精黑芝麻片饼干月子产妇产后营养休闲食品小吃', '¥49.90', '1.5万+人付款', '安徽 合肥')
('变瘦啦脂正品老虎饼干饱腹老虎科技指定营养餐纸代餐饼干变啦官网', '¥198.00', '450人付款', '浙江 杭州')
('变啦脂嗖兽老虎饼干正品官网兽糖纸吧老虎健康科技指定营养餐伴侣', '¥580.00', '636人付款', '上海')
('【小鹿蓝蓝_婴儿米饼】宝宝辅食婴儿无添加糖盐6个月饼干零食磨牙', '¥29.90', '10万+人付款', '安徽 芜湖')
('变啦脂营养代餐饼干老虎官网营养饱腹代餐糖纸妙吧变瘦啦伴侣饼干', '¥198.00', '385人付款', '浙江 杭州')
('雀巢脆脆鲨巧克力威化饼干640g整箱网红休闲小吃食品混合散装零食', '¥26.90', '3.0万+人付款', '广东 广州')
('网红日式小圆饼干散装日本多口味海盐小圆饼零食小吃休闲食品整箱', '¥14.90', '10万+人付款', '福建 厦门')
('小牧苏打饼干梳打咸味香葱奶盐治碱性胃酸无低糖养脂孕妇零食整箱', '¥22.90', '2.0万+人付款', '广东 广州')
('巴比兔饼干正品代餐膳食纤维棒减粗粮纸脂低卡饱腹压缩老虎芭比兔', '¥398.00', '344人付款', '广东 广州')
('低卡博士小钢筋代餐饼干巨硬磨牙棒嘴巴寂寞纯全麦棒低脂零食', '¥14.80', '5.5万+人付款', '辽宁 沈阳')
('米多奇烤香馍片烤馍片多口味散装整箱馍片饼干零食烤馒头片原味', '¥12.90', '3.5万+人付款', '湖南 长沙')
('代餐饼干全麦红豆薏米燕麦低0压缩脂肪粗粮早餐饱腹无糖精零食品', '¥26.00', '4.0万+人付款', '山东 烟台')
('雀巢脆脆鲨巧克力威化饼干640g整箱网红零食小吃散装混合休闲食品', '¥22.80', '2.0万+人付款', '湖南 长沙')
('华美华夫饼干1200g面包整箱早餐蛋糕点心营养早餐学生零食品夜宵', '¥32.90', '8500+人付款', '广东 东莞')
('比比赞网红九蔬薄脆小饼咸味零食蔬菜饼干整箱散装多口味健康早餐', '¥16.90', '4.0万+人付款', '福建 厦门')
('初吉低GI饱腹代餐全麦饼干无糖精0零食卡脂肪热量魔芋压缩粗粮饼', '¥39.90', '2.5万+人付款', '上海')
('潘祥记鲜花饼云南特产传统糕点休闲小零食小吃玫瑰饼干食品大礼包', '¥32.00', '2.5万+人付款', '云南 昆明')
('华夫饼面包整箱营养早餐饼干蛋糕点网红爆款解馋休闲零食品小吃的', '¥29.90', '4961人付款', '福建 厦门')
('900压缩饼干铁桶90压缩干粮军工军粮特种兵正品高能量营养整箱', '¥119.00', '4954人付款', '河北 秦皇岛')
('米多奇烤香馍片馍丁40包整箱早餐食品烤馍馒头片饼干批发零食', '¥32.80', '2.0万+人付款', '河南 新乡')
('红谷林小石子饼*5石头饼麻辣味原味手工饼干早餐女办公室休闲零食', '¥29.90', '8500+人付款', '陕西 西安')