李锡钊 2023-04-03 11:12 采纳率: 100%
浏览 37
已结题

python数据爬取求帮助!急!

求解决方案!
想爬取立创商城元器件的价格,以下是源代码,python版本为3.10,pycharm的版本为2022.2.4

import requests
from lxml import etree


url = 'https://so.szlcsc.com/global.html?k=%25E7%2594%25B5%25E9%2598%25BB&hot-key=ADXL355BEZ-RL7'
headers = {
        # 防盗链
        'referer': 'https://so.szlcsc.com/',
        # 浏览器信息
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 '
                      'Safari/537.36 '
}
resp = requests.get(url, headers=headers)
tree = etree.HTML(resp.text)
names = tree.xpath('//*[@id="shop-list"]/table/tbody/tr[1]/td/div[2]/div[2]/div[3]/div[1]/div[1]/ul/li[2]/div/p/@originalprice')
print(names)
for item in names:
    print(item)

执行代码之后获取的数据应该是4.72,但是输出结果为空

img


以下代码为获取商品的型号

url = 'https://so.szlcsc.com/global.html?k=3296W-1-103LF&hot-key=ADXL355BEZ-RL7'
headers = {
        # 防盗链
        'referer': 'https://so.szlcsc.com/',
        # 浏览器信息
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 '
                      'Safari/537.36 '
}
resp = requests.get(url, headers=headers)
tree = etree.HTML(resp.text)
names = tree.xpath('//*[@id="shop-list"]/table/tbody/tr[1]/td/div[2]/div[2]/div[1]/div/ul/li[1]/span[2]/@title')
print(names)
for item in names:
    print(item)

img


输出结果是正确的
有没有那个老哥能帮忙解决一下

  • 写回答

3条回答 默认 最新

  • cjh4312 2023-04-03 11:47
    关注
    
    from selenium import webdriver
    from lxml import etree
    driver = webdriver.Edge()
    url='https://so.szlcsc.com/global.html?k=%25E7%2594%25B5%25E9%2598%25BB&hot-key=ADXL355BEZ-RL7'
    driver.get(url)
    html=etree.HTML(driver.page_source)
    dd=html.xpath('//@originalprice')
    print(dd)
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • callinglove 2023-04-03 11:40
    关注

    网页中分静态页面与动态页面,多数页面是动静结合的,一般是先加载静态页面,然后通过异步的方式填充数据

    • 试着保存一下reps.text,看看里面有没有你需要的价格数据或者打开页面查看页面的源码,确认一下是不是我说异步数据加载的情况
    • 异步肯定从一个API获取数据,这么获取的数据比较纯,不需要清洗,但是确定这个api非专业人士不可为
    • 解决方式就是用selenium框架去爬取数据
      参考源码
     
    from selenium import webdriver
    from lxml import etree
    driver = webdriver.Edge()
    url='https://so.szlcsc.com/global.html?k=%25E7%2594%25B5%25E9%2598%25BB&hot-key=ADXL355BEZ-RL7'
    driver.get(url)
    html=etree.HTML(driver.page_source)
    prices=html.xpath('//@originalprice')
    for item in prices:
        print(item)
    
    评论 编辑记录
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-04 05:37
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7792544
    • 这篇博客也不错, 你可以看下刚学python爬虫,代码写好了,也不报错就是无法运行求大佬教,代码如下
    • 除此之外, 这篇博客: Python新手入门基础,看完让你会有意想不到的收获中的 比较胜负# 如果条件判断的内容太长,可以在最外侧的条件增加一对大括号# 再在每一个条件之间,使用回车,PyCharm 可以自动增加 8 个空格 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

      if ((player == 1 and computer == 2) or
      (player == 2 and computer == 3) or
      (player == 3 and computer == 1)):
      print(“噢耶!!!电脑弱爆了!!!”)
      elif player == computer: print(“心有灵犀,再来一盘!”)
      else:
      print(“不行,我要和你决战到天亮!”)
      5.2 随机数的处理
      在 Python 中,要使用随机数,首先需要导入 随机数 的 模块 —— “工具包”
      import random
      导入模块后,可以直接在 模块名称 后面敲一个 . 然后按 Tab 键,会提示该模块中包含的所有函数
      random.randint(a, b) ,返回 [a, b] 之间的整数,包含 a 和 b
      例如:
      random.randint(12, 20) # 生成的随机数n: 12 <= n <= 20
      random.randint(20, 20) # 结果永远是 20
      random.randint(20, 10) # 该语句是错误的,下限必须小于上限
      运算符
      目标
      算数运算符
      比较(关系)运算符
      逻辑运算符
      赋值运算符
      运算符的优先级
      数学符号表链接: https://zh.wikipedia.org/wiki/数学符号表

      1. 算数运算符
        是完成基本的算术运算使用的符号,用来处理四则运算
        运算符描述实例+加10 + 20 = 30-减10 - 20 = -10*乘10 * 20 = 200/除10 / 20 = 0.5//取整除返回除法的整数部分(商) 9 // 2 输出结果 4%取余数返回除法的余数 9 % 2 = 1**幂又称次方、乘方,2 ** 3 = 8

      在 Python 中 * 运算符还可以用于字符串,计算结果就是字符串重复指定次数的结果
      In [1]: “-” * 50
      Out[1]: ‘----------------------------------------’
      02. 比较(关系)运算符
      运算符描述==检查两个操作数的值是否 相等 ,如果是,则条件成立,返回 True!=检查两个操作数的值是否 不相等 ,如果是,则条件成立,返回 True>检查左操作数的值是否 大于 右操作数的值,如果是,则条件成立,返回 True<检查左操作数的值是否 小于 右操作数的值,如果是,则条件成立,返回 True>=检查左操作数的值是否 大于或等于 右操作数的值,如果是,则条件成立,返回 True<=检查左操作数的值是否 小于或等于 右操作数的值,如果是,则条件成立,返回 True

      Python 2.x 中判断 不等于 还可以使用 <> 运算符

      != 在 Python 2.x 中同样可以用来判断 不等于

      1. 逻辑运算符
        运算符逻辑表达式描述andx and y只有 x 和 y 的值都为 True,才会返回 True
        否则只要 x 或者 y 有一个值为 False,就返回 Falseorx or y只要 x 或者 y 有一个值为 True,就返回 True
        只有 x 和 y 的值都为 False,才会返回 Falsenotnot x如果 x 为 True,返回 False
        如果 x 为 False,返回 True

      2. 赋值运算符
        在 Python 中,使用 = 可以给变量赋值
        在算术运算时,为了简化代码的编写, Python 还提供了一系列的 与 算术运算符 对应的 赋值运算符
        注意: 赋值运算符中间不能使用空格
        运算符描述实例=简单的赋值运算符c = a + b 将 a + b 的运算结果赋值为 c+=加法赋值运算符c += a 等效于 c = c + a-=减法赋值运算符c -= a 等效于 c = c - a*=乘法赋值运算符c = a 等效于 c = c * a/=除法赋值运算符c /= a 等效于 c = c / a//=取整除赋值运算符c //= a 等效于 c = c // a%=取 模 (余数)赋值运算符c %= a 等效于 c = c % a*=幂赋值运算符c **= a 等效于 c = c ** a

      3. 运算符的优先级
        以下表格的算数优先级由高到最低顺序排列
        运算符描述**幂 (最高优先级)* / % //乘、除、取余数、取整除+ -加法、减法<= < > >=比较运算符== !=等于运算符= %= /= //= -= += *= **=赋值运算符not or and逻辑运算符

      循环
      目标
      程序的三大流程
      while 循环基本使用
      break 和 continue
      while 循环嵌套

      1. 程序的三大流程
        在程序开发中,一共有三种流程方式:顺序 —— 从上向下 ,顺序执行代码分支 —— 根据条件判断,决定执行代码的 分支循环 —— 让 特定代码 重复 执行
      2. while 循环基本使用
        循环的作用就是让 指定的代码 重复的执行
        while 循环最常用的应用场景就是 让执行的代码 按照 指定的次数 重复 执行
        需求 —— 打印 5 遍 Hello Python
        思考 —— 如果要求打印 100 遍怎么办?
        2.1 while 语句基本语法
        初始条件设置 —— 通常是重复执行的 计数器
        while 条件(判断 计数器 是否达到 目标次数):
        条件满足时,做的事情1
        条件满足时,做的事情2
        条件满足时,做的事情3
        …(省略)… 处理条件(计数器 + 1)
        注意:
        while 语句以及缩进部分是一个 完整的代码块
        第一个 while 循环
        需求
        打印 5 遍 Hello Python
        while
    • 您还可以看一下 黄勇老师的Python从入门到实战 基础入门视频教程(讲解超细致)课程中的 子类不能继承父类的私有···小节, 巩固相关知识点

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月11日
  • 已采纳回答 4月3日
  • 创建了问题 4月3日

悬赏问题

  • ¥15 微信实时共享位置修改
  • ¥100 TG的session协议号转成直登号号后客户端登录几分钟后自动退出设备
  • ¥30 共模反馈回路的小信号增益
  • ¥15 arduino ssd1306函数与tone函数放歌代码不兼容问题
  • ¥70 0.96版本hbase的row_key里含有双引号,无法deleteall
  • ¥20 Ida Pro增加插件出现问题
  • ¥15 诊断性META分析合并效能的检验
  • ¥15 请问abb根据色块判断奇偶数并根据批次号放入仓储
  • ¥66 开发PC客户端一定也要开发上位机吗?
  • ¥20 Java eclipse连接数据库