当前位置: 首页 > news >正文

关于python问题 ,生成的excel文件内无爬取的数据存在,请问应如何解决?

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

问题描述

  关于#python#的问题 ,但生成的excel文件内无爬取的数据存在

# coding=utf-8
from bs4 import BeautifulSoup
import re
import urllib.request, urllib.error
import xlwt
findLink = re.compile(r"alt=\"(.*?)\"")
findImgSrc = re.compile(r'<div class="comment-star (?<!\d)(star\d+)"</div>')
findRating = re.compile(r'<div class="comment-time">(.*?)<\/div>')
findJudge = re.compile(r'<p class="comment-con">(.*?)<\/p>/i')
def main():baseurl = "https://item.jd.com/100027211987.html#comment"  #要爬取的网页链接# 1.爬取网页datalist = getData(baseurl)savepath = "小米手环7pro.xls"saveData(datalist,savepath)
def getData(baseurl, comment=None):datalist = []  # 用来存储爬取的网页信息url = baseurl + str(10)html = askURL(url)  # 保存获取到的网页源码# 2.逐一解析数据soup = BeautifulSoup(html, "html.parser")for item in soup.find_all('div', class_="comment-item"):  # 查找符合要求的字符串data = []item = str(comment-item)link = re.findall(findLink, item)[0]data.append(link)imgSrc = re.findall(findImgSrc, item)[0]data.append(imgSrc)rating = re.findall(findRating, item)[0]data.append(rating)judgeNum = re.findall(findJudge, item)[0]data.append(judgeNum)return datalist
def askURL(url):head = {"User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 80.0.3987.122  Safari / 537.36"}request = urllib.request.Request(url, headers=head)html = ""try:response = urllib.request.urlopen(request)html = response.read().decode("utf-8")except urllib.error.URLError as e:if hasattr(e, "code"):print(e.code)if hasattr(e, "reason"):print(e.reason)return html
# 保存数据到表格
def saveData(datalist,savepath):print("save.......")book = xlwt.Workbook(encoding="utf-8",style_compression=0) #创建workbook对象sheet = book.add_sheet('小米手环7pro', cell_overwrite_ok=True) #创建工作表col = ("用户名","评分","日期","评价")for i in range(0,4):sheet.write(0,i,col[i])  #列名for i in range(0, min(len(datalist), 10)):data = datalist[i]for j in range(0,4):sheet.write(i+1,j,data[j])  #数据book.save(savepath) #保存
# 保存数据到数据库
if __name__ == "__main__":  # 当程序执行时# 调用函数main()# init_db("movietest.db")print("爬取完毕!")

该代码可以成功运行,但生成的excel文件内无爬取的数据存在,请问应如何解决?

如上问题有来自我自身项目开发,有的收集网站,有的来自读者,如有侵权,立马删除。

解决方案

  如下是上述问题的解决方案,仅供参考:

  您的代码中存在几个问题,这可能是导致生成的Excel文件内没有数据的原因:

  1. getData 函数中的URL拼接错误:在getData函数中,您尝试通过baseurl + str(10)来拼接URL,但这并不是一个有效的URL。您可能想要通过分页来获取数据,但是需要根据实际网页的分页机制来构造正确的URL。

  2. getData 函数中comment参数未使用:函数定义了comment参数,但在函数体内并没有使用这个参数。

  3. 正则表达式使用错误:在getData函数中,您使用了re.findall来查找匹配项,但是您试图从findLinkfindImgSrcfindRatingfindJudge的查找结果中直接使用[0]索引,这假设了每个正则表达式至少有一个匹配项。如果没有匹配项,这将导致索引错误。

  4. 数据存储逻辑错误:在for item in soup.find_all('div', class_="comment-item"):循环中,您应该在找到每个comment-item后将数据添加到datalist中,但当前的逻辑是将数据添加到局部变量data中,并没有将data添加到datalist

  5. saveData函数中数据量限制:在for i in range(0, min(len(datalist), 10)):循环中,您限制了最多只保存10条数据,即使datalist中有更多的数据。

以下是针对上述问题的一些修正建议:

  • 确保URL拼接正确,如果需要分页,需要根据实际的分页URL结构来调整代码。
  • 移除未使用的comment参数。
  • 在使用re.findall后,检查结果列表是否非空,然后再访问第一个元素。
  • 在解析每个comment-item后,应该将完整的data列表添加到datalist中。
  • 根据实际需要调整saveData函数中保存数据的数量限制。

修正后的getData函数示例:

def getData(baseurl, page=None):datalist = []  # 用来存储爬取的网页信息if page:url = f"{baseurl}?page={page}"else:url = baseurlhtml = askURL(url)  # 保存获取到的网页源码soup = BeautifulSoup(html, "html.parser")for item in soup.find_all('div', class_="comment-item"):data = []link = findLink.search(item)if link:data.append(link.group(1))else:data.append("")imgSrc = findImgSrc.search(item)if imgSrc:data.append(imgSrc.group(1))else:data.append("")rating = findRating.search(item)if rating:data.append(rating.group(1))else:data.append("")judgeNum = findJudge.search(item)if judgeNum:data.append(judgeNum.group(1))else:data.append("")datalist.append(data)  # 将数据添加到datalistreturn datalist

请注意,您可能还需要根据实际网页的结构调整正则表达式和BeautifulSoup的解析逻辑。此外,确保您的网络请求头User-Agent是有效的,以避免被网站阻止。

  希望如上措施及解决方案能够帮到有需要的你。

  PS:如若遇到采纳如下方案还是未解决的同学,希望不要抱怨&&急躁,毕竟影响因素众多,我写出来也是希望能够尽最大努力帮助到同类似问题的小伙伴,即把你未解决或者产生新Bug黏贴在评论区,我们大家一起来努力,一起帮你看看,可以不咯。

  若有对当前Bug有与如下提供的方法不一致,有个不情之请,希望你能把你的新思路或新方法分享到评论区,一起学习,目的就是帮助更多所需要的同学,正所谓「赠人玫瑰,手留余香」。

☀️写在最后

  ok,以上就是我这期的Bug修复内容啦,如果还想查找更多解决方案,你可以看看我专门收集Bug及提供解决方案的专栏《CSDN问答解惑-专业版》,都是实战中碰到的Bug,希望对你有所帮助。到此,咱们下期拜拜。

码字不易,如果这篇文章对你有所帮助,帮忙给 bug菌 来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。

同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!

📣关于我

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿哇。


相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 花10分钟写个漂亮的后端API接口模板!
  • 【架构】客户端优化
  • vue3后台管理系统 vue3+vite+pinia+element-plus+axios上
  • 基于Python的鸢尾花聚类与分类
  • VS+opencv+环境配置
  • QEMU虚拟机(TODO)
  • 【Spring】——代理模式、AOP、MyBatis-Spring学习以及Spring事务
  • WPF中的数据模板和样式:实现一致性和可维护性
  • openmetadata安装
  • 赞!蚓链用数字化打造助农扶农电商平台!
  • 【多线程】线程池
  • 详解Qt 之 QColor、QColorSpace与QColorTransform
  • JSONP跨域
  • IDEA优化配置,提高启动和运行速度
  • 什么牌子的洗地机好用?推荐多款质量好洗地机的品牌
  • hexo+github搭建个人博客
  • centos安装java运行环境jdk+tomcat
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • JAVA 学习IO流
  • Laravel Mix运行时关于es2015报错解决方案
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Mysql5.6主从复制
  • Promise面试题2实现异步串行执行
  • Redux系列x:源码分析
  • SpingCloudBus整合RabbitMQ
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • 精彩代码 vue.js
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 如何实现 font-size 的响应式
  • Android开发者必备:推荐一款助力开发的开源APP
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #LLM入门|Prompt#3.3_存储_Memory
  • (12)目标检测_SSD基于pytorch搭建代码
  • (2)空速传感器
  • (二)windows配置JDK环境
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (四)React组件、useState、组件样式
  • (转)visual stdio 书签功能介绍
  • (转载)OpenStack Hacker养成指南
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .Net Core 微服务之Consul(二)-集群搭建
  • .NET gRPC 和RESTful简单对比
  • .NET Reactor简单使用教程
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .Net小白的大学四年,内含面经
  • ??Nginx实现会话保持_Nginx会话保持与Redis的结合_Nginx实现四层负载均衡
  • @antv/g6 业务场景:流程图
  • @RequestBody与@ResponseBody的使用
  • @RestController注解的使用
  • [ACM] hdu 1201 18岁生日
  • [Angularjs]asp.net mvc+angularjs+web api单页应用
  • [AX]AX2012开发新特性-禁止表或者表字段