当前位置: 首页 > 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电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿哇。


http://www.lryc.cn/news/411585.html

相关文章:

  • 详细介绍Avalonia中的文件操作StorageProvider服务
  • 「7.31更新日志」JVS·智能BI、逻辑、规则引擎功能更新说明
  • 编程语言 | C | 代码整理 | 4月
  • 模板可变参数
  • 是你!是你!我们的黄金写手!
  • QT 获取用于获取特定屏幕坐标处的最上层小部件(父与子关系的类)
  • 【应急响应】Linux权限维持 -隐藏权限
  • 还有哪些AI应用案例目前备受关注
  • 将控制台内容输出到文本文件
  • 380. O(1) 时间插入、删除和获取随机元素【 力扣(LeetCode) 】
  • 【每日刷题】Day91
  • 数据库索引的创建和使用
  • 光流传感器 - 从零开始认识各种传感器【第二十二期】
  • 爬虫:jsonpath模块及腾讯招聘数据获取
  • 透明屏幕的显示原理与特点
  • [Day 41] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • PHP表单验证
  • 英文文献翻译软件有哪些?知道这5款工具就够了
  • 单线程 和多线程区别,看打印输出1000个数字效果
  • 【问题处理】海康视频websocket代理问题(websocket在业务系统https协议下调用海康ws协议)
  • 【面试分享】面试题——redis
  • GLSL教程 第十三章:综合项目:创建一个完整的渲染场景(一更)
  • pgvector: 30 倍构建向量嵌入索引
  • GNSS形变监测系统
  • 每天一个数据分析题(四百五十三)- 随机抽样
  • Python爬虫知识体系-----Selenium
  • springboot+webSocket对接chatgpt
  • 【ROS2】 默认的DDS通信中间件替换为Eclipse Cyclone_DDS (DDS配置方法)
  • 迈向数智金融:机器学习金融科技新纪元的新风采
  • Nginx+PHP+CI框架实现,访问静态文件带权限验证