「已注销」 2022-12-24 13:06 采纳率: 100%
浏览 47
已结题

爬虫csv获取不到全部数据

为什么只能爬到一点点数据呢,怎么才能爬到全部数据

img

import requests
from bs4 import BeautifulSoup
from selenium import webdriver
import time
import csv
url1 = 'https://www.mi.com/shop/category/list'
headers1 = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Core/1.94.188.400 QQBrowser/11.4.5225.400'}
respost1 = requests.get(url1, headers=headers1).text
res = BeautifulSoup(respost1, 'html.parser')
lst = []  # 商品名称
for i in res.find_all('span')[16:20]:  # 16:277 获取全数据
    b = i.string
    lst.append(b)
lst2 = []  # 获取到所有链接
lst4 = []
for i in lst:
    dic = {}
    try:
        drive = webdriver.Chrome()
        drive.maximize_window()
        drive.get('https://www.mi.com/shop/category/list')
        time.sleep(0.5)
        drive.find_element_by_link_text(f"{i}").click()
        time.sleep(0.5)
        drive.find_element_by_class_name('J_nav_comment').click()
        time.sleep(0.5)
        handles = drive.window_handles
        drive.switch_to.window(handles[-1])
        cur_url = drive.current_url
        w = cur_url[-6:-11:-1]  # id
        w2 = w[::-1]  # 反转
        # 接口
        url = f'https://api2.service.order.mi.com/user_comment/get_summary?show_all_tag=1&goods_id={w2}&v_pid=17972&support_start=0&support_len=10&add_start=0&add_len=10&profile_id=0&show_img=0&callback=__jp6'
        headers = {'referer': 'https://www.mi.com/',
                   'accept': 'application/json, text/plain, */*',
                   'sec-ch-ua': '"Not?A_Brand";v="8", "Chromium";v="108", "Google Chrome";v="108"',
                   'sec-ch-ua-mobile': '?0',
                   'sec-ch-ua-platform': "Windows",
                   'sec-fetch-dest': 'script',
                   'sec-fetch-mode': 'no-cors',
                   'sec-fetch-site': 'same-site',
                   'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'}
        respost = requests.get(url, headers=headers)
        data = respost.text
        con_1 = data.split(',')  # 将数据分割
        a = con_1[37]
        b = con_1[36]
        c = con_1[43]
        d = con_1[42]
        w3 = a[17:]  # 总评论数
        w4 = b[16:]  # 好评数
        w5 = c[14:]  # 满意度
        w6 = d[13:]
        dic['商品名称'] = f'{i}'
        dic['id'] = w2
        dic['总评论数'] = w3
        dic['好评数'] = w4
        dic['满意度'] = w5
        lst4.append(dic)
        print(f'{i}', w2, w3, w4, w5)
        drive.quit()  # 退出
    except :
        drive.quit()
# 循环完成之后在做保存
with open('小米商城.csv', 'a+', encoding='gbk', newline='') as f:
    write = csv.DictWriter(f, fieldnames=['商品名称', '总评论数', '好评数', '满意度', 'id'])
    write.writeheader()
    write.writerows(lst4)

  • 写回答

2条回答 默认 最新

  • cjh4312 2022-12-24 13:46
    关注
    #这样可以拿到所有商品
    for i in res.find_all('span',{'class':{'text'}}):
        d=i.text
        lst.append(d)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月1日
  • 已采纳回答 12月24日
  • 创建了问题 12月24日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分