鱼C论坛

 找回密码
 立即注册
查看: 801|回复: 32

[作品展示] 获取发改委发布的汽油柴油价格数据【图片】

[复制链接]
回帖奖励 15 鱼币 回复本帖可获得 3 鱼币奖励! 每人限 1 次
发表于 2023-12-14 20:11:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  不知道能不能过审

  1. import requests
  2. from bs4 import BeautifulSoup
  3. import os

  4. base_url = "https://www.ndrc.gov.cn/xwdt/ztzl/gncpyjg/"
  5. root = "C://Users//Lenovo//Desktop//网页"

  6. page_urls = []
  7. #处理第一页
  8. url = f"{base_url}index.html"
  9. print(url)
  10. response = requests.get(url)
  11. content = response.text
  12. soup = BeautifulSoup(content, "html.parser")
  13. links = soup.find_all('a')  # 找到每一页的URL链接
  14. for link in links:
  15.     ur = link.get('href')
  16.     if len(ur) < 31:
  17.         continue
  18.     else:
  19.         ur = ur[2:]
  20.         page_urls.append(ur)  # 将URL添加到列表中
  21. '''
  22. #处理2~10页
  23. for page in range(1, 10):
  24.     url = f"{base_url}index_{page}.html"
  25.     print(url)
  26.     response = requests.get(url)
  27.     content = response.text
  28.     soup = BeautifulSoup(content, "html.parser")
  29.     links = soup.find_all('a')  # 找到每一页的URL链接
  30.     for link in links:
  31.         ur = link.get('href')
  32.         if len(ur) < 31:
  33.             continue
  34.         else:
  35.             ur = ur[2:]
  36.             page_urls.append(ur)  # 将URL添加到列表中
  37. '''

  38. image_urls = []
  39. for i in page_urls:
  40.     url = f"{base_url}{i}"
  41.     response = requests.get(url)
  42.     content = response.content
  43.     soup = BeautifulSoup(content, "html.parser",from_encoding='utf-8')
  44.     container = soup.find('div', {'class': 'container'})
  45.     #print(container)
  46.     try:
  47.         trs_editor = container.find('div', {'class': 'TRS_Editor'})
  48.         for img in trs_editor.find_all('img'):
  49.             print(url[:48]+img.get('src')[1:])
  50.             image_urls.append(url[:48]+img.get('src')[1:])
  51.     except:
  52.         print("本网页没有图片")


  53. # 保存图片
  54. for i, link in enumerate(image_urls):
  55.     try:
  56.         response = requests.get(link)
  57.         if response.status_code == 200:
  58.             # 提取图片文件名
  59.             file_name = link.split('/')[-2]+link.split('/')[-1]
  60.             file_path = os.path.join(root, file_name)

  61.             # 保存图片
  62.             with open(file_path, 'wb') as f:
  63.                 f.write(response.content)
  64.             print(f"第{i+1}张图片保存成功")
  65.         else:
  66.             print(f"第{i+1}张图片下载失败")
  67.     except Exception as e:
  68.         print(f"第{i+1}张图片下载出错:{str(e)}")
复制代码
记得更换root为自己需要保存的文件夹路径,如有对2~10页数据需求,记得去掉注释
最后,提醒大家合法使用爬虫工具

评分

参与人数 2荣誉 +10 鱼币 +5 贡献 +6 收起 理由
liuhongrun2022 + 5 + 5 + 3 无条件支持楼主!
sfqxx + 5 + 3

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-14 22:45:26 | 显示全部楼层
本帖最后由 yinda_peng 于 2023-12-26 16:44 编辑

我在github上面做了一个公开的存储库,算是发表了吧?(https://github.com/pengyinda/fuel-price-crawler)没在github上面发过东西,第一次弄,估计很粗糙
https://www.ndrc.gov.cn/xwdt/ztzl/gncpyjg/
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-14 20:12:26 | 显示全部楼层
你好!你的代码基本上是可以实现的,不过有一些小问题需要修复。首先,在获取页面链接时,你创建了一个空的列表 `page_urls`,但是没有给它赋值,所以需要在 `page_urls = ` 后面加上一个方括号来创建一个空列表:`page_urls = []`。

其次,在保存图片时,你提取文件名的方法有问题。你使用了 `split()` 方法来分割链接,并将其赋值给 `file_name`,但是 `split()` 方法返回的是一个列表,所以你需要使用列表索引来获得文件名,比如 `link.split('/')[-1]`。

此外,你在拼接文件路径时写错了变量名,将 `file_name` 写成 `file_path`,需要修正一下。

最后,你的代码中有一行注释掉的部分,用于处理第2到10页的数据,如果你需要处理这些页面的数据,可以将注释去掉,注意对齐。

修改后的代码如下:
  1. import requests
  2. from bs4 import BeautifulSoup
  3. import os
  4. base_url = "https://www.ndrc.gov.cn/xwdt/ztzl/gncpyjg/"
  5. root = "C://Users//Lenovo//Desktop//网页"
  6. page_urls = []
  7. # 处理第一页
  8. url = f"{base_url}index.html"
  9. print(url)
  10. response = requests.get(url)
  11. content = response.text
  12. soup = BeautifulSoup(content, "html.parser")
  13. links = soup.find_all('a')  # 找到每一页的URL链接
  14. for link in links:
  15.     ur = link.get('href')
  16.     if len(ur) < 31:
  17.         continue
  18.     else:
  19.         ur = ur
  20.         page_urls.append(ur)  # 将URL添加到列表中
  21. # 处理2~10页
  22. '''
  23. for page in range(1, 10):
  24.     url = f"{base_url}index_{page}.html"
  25.     print(url)
  26.     response = requests.get(url)
  27.     content = response.text
  28.     soup = BeautifulSoup(content, "html.parser")
  29.     links = soup.find_all('a')  # 找到每一页的URL链接
  30.     for link in links:
  31.         ur = link.get('href')
  32.         if len(ur) < 31:
  33.             continue
  34.         else:
  35.             ur = ur
  36.             page_urls.append(ur)  # 将URL添加到列表中
  37. '''
  38. image_urls = []
  39. for i in page_urls:
  40.     url = f"{base_url}{i}"
  41.     response = requests.get(url)
  42.     content = response.content
  43.     soup = BeautifulSoup(content, "html.parser", from_encoding='utf-8')
  44.     container = soup.find('div', {'class': 'container'})
  45.     try:
  46.         trs_editor = container.find('div', {'class': 'TRS_Editor'})
  47.         for img in trs_editor.find_all('img'):
  48.             print(url + img.get('src'))
  49.             image_urls.append(url + img.get('src'))
  50.     except:
  51.         print("本网页没有图片")
  52. # 保存图片
  53. for i, link in enumerate(image_urls):
  54.     try:
  55.         response = requests.get(link)
  56.         if response.status_code == 200:
  57.             # 提取图片文件名
  58.             file_name = link.split('/')[-1]
  59.             file_path = os.path.join(root, file_name)
  60.             # 保存图片
  61.             with open(file_path, 'wb') as f:
  62.                 f.write(response.content)
  63.             print(f"第{i+1}张图片保存成功")
  64.         else:
  65.             print(f"第{i+1}张图片下载失败")
  66.     except Exception as e:
  67.         print(f"第{i+1}张图片下载出错:{str(e)}")
复制代码

希望能帮到你!记得合法使用爬虫工具哦!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-14 20:54:51 | 显示全部楼层

回帖奖励 +3 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-15 10:42:14 | 显示全部楼层

回帖奖励 +3 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-15 15:05:30 | 显示全部楼层

回帖奖励 +3 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-16 11:25:10 | 显示全部楼层

回帖奖励 +3 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-16 13:38:28 | 显示全部楼层

回帖奖励 +3 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-21 09:25:37 | 显示全部楼层

回帖奖励 +3 鱼币

等下就去试试,很实用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-25 18:55:50 | 显示全部楼层

回帖奖励 +3 鱼币

来啦

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-26 11:00:33 | 显示全部楼层
来啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-26 11:01:14 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-26 12:38:09 | 显示全部楼层

回帖奖励 +3 鱼币

没问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-26 16:40:14 | 显示全部楼层

回帖奖励 +3 鱼币

yinda_peng 发表于 2023-12-14 22:45
我在github上面做了一个公开的存储库,算是发表了吧?没在github上面发过东西,第一次弄,估计很粗糙
http ...

一个个都这么牛的吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-26 16:43:17 | 显示全部楼层
咕咕鸟1 发表于 2023-12-26 16:40
一个个都这么牛的吗

哪有……就是学了一点点爬虫做的东西这个获取数据还算友好的了,没有一些反爬虫的东西,诶,话说我好像是想放github的链接来着
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-5 22:05:56 | 显示全部楼层

回帖奖励 +3 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-5 22:10:11 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-9 11:17:42 | 显示全部楼层

回帖奖励 +3 鱼币

666666666666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-16 17:02:01 | 显示全部楼层
起飞
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-18 17:13:39 | 显示全部楼层

回帖奖励 +3 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 04:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表