火箭舒克. 2023-05-16 00:39 采纳率: 25%
浏览 15

python爬虫 多页爬虫遇见乱码数据应该怎么处理怎么重新爬取此页

因为他爬回来有的页数据是方块 但重新爬取一下就不是了 我想让他重新爬取这个方块数据的页 但是为什么except一直在爬这个页出不来了啊 应该怎么写 怎么办啊
import requests
import parsel
for page in range(1,168):
def get_html():
print("函数开始")

    cars_data=parsel.Selector(response.text)
    lis=cars_data.css('#__next > div.tw-flex > div.new-main.new > div > div > div.jsx-2898915557.wrap > ul > li')
    # return lis

# def get_inf(lis_1):
    for li in lis:
        car_title=li.css(' li > a > dl > dt > p::text').get()
        car_info_1=li.css('li > a > dl >dd:nth-child(2)::text').getall()
        car_info_2=li.css('li > a > dl >dd:nth-child(3)>span::text').getall()
        car_price_1 = li.css('li > a > dl >dd:nth-child(4)::text').get().replace('万','')
        car_price_2=li.css('li > a > dl >dd:nth-child(4)>span::text').get().replace('新车指导价:','').replace('万','')

        car_years=''.join(car_info_1).split('|')[0]
        car_gonli=''.join(car_info_1).split('|')[1].replace('万公里','')
        car_posotion = ''.join(car_info_1).split('|')[2]

        if len(car_info_2)==2:
           car_jianche=car_info_2[0]
           car_guohu=car_info_2[0]
        else:
           car_jianche="无检测报告"
           car_guohu=car_info_2[0]



        for i in car_price_1:
        try:
            int(i)
            print(car_title, car_years, car_gonli, car_posotion, car_jianche, car_guohu, car_price_1,
                  car_price_2)
            break
        except :
            print(i)
            print("错误开始",page)
            print(car_title, car_years, car_gonli, car_posotion, car_jianche, car_guohu, car_price_1,
                  car_price_2)
            get_html()
            # get_inf(lis_5)
            print("错误结束")
            break
        continue
    print("跳出循环")
print("函数结束")

get_html()

get_inf(lis_0)

print('---------------------------------------第', page, '页---------------------------------------')

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-16 02:05
    关注
    • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7513384
    • 这篇博客也不错, 你可以看下Python图像处理是没有任何一门编程语言能比得上的!为什么这么说呢?看完这篇你就知道了!
    • 同时,你还可以查看手册:python- 旧式字符串格式化方法 中的内容
    • 除此之外, 这篇博客: python在字典中创建一键多值的几种方法以及从其他数据结构转为一键多值的字典几种方法中的 其他数据结构转为一键多值的字典几种方法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 原始数据:

      pairs = [('one', 1), ('two', 2), ('three', 3), ('four', 4), ('one', 11)]
      

      转化成一键多值的字典形式:

       {'one': [1,11], 'two': [2], 'three': [3], 'four': [4]}
      

      方法一:

      • 一般都使用这个方法,其实看着有点杂乱,以后试着用方法二
      pairs = [('one', 1), ('two', 2), ('three', 3), ('four', 4), ('one', 11)]
      d = {}   
      for key, value in pairs:
          if key not in d:
              d[key] = []
          d[key].append(value)
      print(d)
      
      # Out:{'one': [1, 11], 'two': [2], 'three': [3], 'four': [4]}
      

      方法二:

      • 这个就看着很舒服了
      from collections import defaultdict
      
      pairs = [('one', 1), ('two', 2), ('three', 3), ('four', 4), ('one', 11)]
      d = defaultdict(list)
      for key, value in pairs:
          d[key].append(value)  # 省去了if判断语句
      print(d)
      
      # Out:defaultdict(<class 'list'>, {'one': [1, 11], 'two': [2], 'three': [3], 'four': [4]})
      
    • 您还可以看一下 王宁宁老师的Python数据结构与算法视频教程课程中的 抽象数据类型和面向对象编程小节, 巩固相关知识点
    • 以下回答由chatgpt基于相关博客总结生成:

      针对问题,出现乱码或方块可能是由于页面编码格式不对或者数据加密等原因导致的,可以尝试解决以下几个方面:

      1. 确认网页编码格式:可以使用requests.get获取网页,并查看页面编码格式,将其改为正确的编码格式,例如utf-8即可。示例代码如下:
      import requests
      from bs4 import BeautifulSoup
      
      url = 'https://example.com'
      response = requests.get(url)
      response.encoding = 'utf-8' # 设置编码格式
      soup = BeautifulSoup(response.text, 'html.parser')
      
      1. 检查数据是否加密:可以观察页面中网络请求的数据,在浏览器的开发者工具中查看,在跟踪请求时是否出现加密的操作。如果出现加密,则需要解密该数据,才能进行正确的解析和显示。

      2. 尝试使用自动化测试工具重新爬取数据:可以使用Selenium等自动化测试工具,模拟浏览器操作,重新爬取数据。示例代码如下:

      from selenium import webdriver
      
      url = 'https://example.com'
      browser = webdriver.Chrome() # 需要下载对应的ChromeDriver,放在环境变量中或指定路径
      browser.get(url)
      soup = BeautifulSoup(browser.page_source, 'html.parser')
      browser.quit()
      
      1. 在处理数据时使用异常处理机制:如果某个页面出现了异常,比如解析数据时出现了错误,则可以使用try-except语句,捕捉异常并重新爬取该页面。示例代码如下:
      for page in pages:
          try:
              # 解析该页面的数据
              # ...
          except Exception as e:
              print(e) # 输出错误信息
              # 重新爬取该页面
              response = requests.get(page)
              if response.status_code == 200:
                  soup = BeautifulSoup(response.text, 'html.parser')
      

      需要注意的是,多次重新爬取同一页面可能会被网站的反爬虫机制封禁IP,需要适当控制重新爬取的次数和频率。同时,在爬取数据时需要遵守网站的robots.txt协议,不要过度频繁地爬取对方网站的数据。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月16日

悬赏问题

  • ¥15 有偿找一懂dylib反编译的大拿,是ios越狱dylib动态库,我需要绕过验证。
  • ¥15 构建工单的总账影响在哪里查询或修改
  • ¥15 三个简单项目写完之后有重赏之后联系我
  • ¥15 python报内存不能read错误
  • ¥15 hexo安装这种情况怎么办
  • ¥100 找hCaptcha图形验证码自动识别解决方案
  • ¥15 启动pycharm出错
  • ¥15 Windows Script Host 无法找到脚本文件"C:\ProgramData\Player800\Cotrl.vbs”
  • ¥15 matlab自定义损失函数
  • ¥15 35114 SVAC视频验签的问题