鱼C论坛

 找回密码
 立即注册
查看: 1559|回复: 35

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

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

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

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

x
  不知道能不能过审
import requests
from bs4 import BeautifulSoup
import os

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

page_urls = []
#处理第一页
url = f"{base_url}index.html"
print(url)
response = requests.get(url)
content = response.text
soup = BeautifulSoup(content, "html.parser")
links = soup.find_all('a')  # 找到每一页的URL链接
for link in links:
    ur = link.get('href')
    if len(ur) < 31:
        continue
    else:
        ur = ur[2:]
        page_urls.append(ur)  # 将URL添加到列表中
'''
#处理2~10页
for page in range(1, 10):
    url = f"{base_url}index_{page}.html"
    print(url)
    response = requests.get(url)
    content = response.text
    soup = BeautifulSoup(content, "html.parser")
    links = soup.find_all('a')  # 找到每一页的URL链接
    for link in links:
        ur = link.get('href')
        if len(ur) < 31:
            continue
        else:
            ur = ur[2:]
            page_urls.append(ur)  # 将URL添加到列表中
'''

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


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

            # 保存图片
            with open(file_path, 'wb') as f:
                f.write(response.content)
            print(f"第{i+1}张图片保存成功")
        else:
            print(f"第{i+1}张图片下载失败")
    except Exception as e:
        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页的数据,如果你需要处理这些页面的数据,可以将注释去掉,注意对齐。

修改后的代码如下:
import requestsfrom bs4 import BeautifulSoupimport osbase_url = "https://www.ndrc.gov.cn/xwdt/ztzl/gncpyjg/"root = "C://Users//Lenovo//Desktop//网页"page_urls = []# 处理第一页url = f"{base_url}index.html"print(url)response = requests.get(url)content = response.textsoup = BeautifulSoup(content, "html.parser")links = soup.find_all('a')  # 找到每一页的URL链接for link in links:    ur = link.get('href')    if len(ur) < 31:        continue    else:        ur = ur        page_urls.append(ur)  # 将URL添加到列表中# 处理2~10页'''for page in range(1, 10):    url = f"{base_url}index_{page}.html"    print(url)    response = requests.get(url)    content = response.text    soup = BeautifulSoup(content, "html.parser")    links = soup.find_all('a')  # 找到每一页的URL链接    for link in links:        ur = link.get('href')        if len(ur) < 31:            continue        else:            ur = ur            page_urls.append(ur)  # 将URL添加到列表中'''image_urls = []for i in page_urls:    url = f"{base_url}{i}"    response = requests.get(url)    content = response.content    soup = BeautifulSoup(content, "html.parser", from_encoding='utf-8')    container = soup.find('div', {'class': 'container'})    try:        trs_editor = container.find('div', {'class': 'TRS_Editor'})        for img in trs_editor.find_all('img'):            print(url + img.get('src'))            image_urls.append(url + img.get('src'))    except:        print("本网页没有图片")# 保存图片for i, link in enumerate(image_urls):    try:        response = requests.get(link)        if response.status_code == 200:            # 提取图片文件名            file_name = link.split('/')[-1]            file_path = os.path.join(root, file_name)            # 保存图片            with open(file_path, 'wb') as f:                f.write(response.content)            print(f"第{i+1}张图片保存成功")        else:            print(f"第{i+1}张图片下载失败")    except Exception as e:        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-10-12 17:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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