yinda_peng 发表于 2023-12-14 20:11:54

获取发改委发布的汽油柴油价格数据【图片】

不知道能不能过审

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
      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'})
    #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'))
            image_urls.append(url[:48]+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('/')[-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页数据需求,记得去掉注释
最后,提醒大家合法使用爬虫工具

yinda_peng 发表于 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/

FishC 发表于 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 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
      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 小助理,如未能正确解答您的问题,请继续追问。

sfqxx 发表于 2023-12-14 20:54:51

六翻了 发表于 2023-12-15 10:42:14

yu55800 发表于 2023-12-15 15:05:30

{:5_108:}

kerln888 发表于 2023-12-16 11:25:10

{:10_279:}{:10_279:}{:10_279:}

陈勃 发表于 2023-12-16 13:38:28

{:5_106:}

yummyis 发表于 2023-12-21 09:25:37

{:10_256:}{:10_281:}等下就去试试,很实用

中英文泡椒 发表于 2023-12-25 18:55:50

{:10_279:}来啦

陈勃 发表于 2023-12-26 11:00:33

{:10_256:}来啦

陈勃 发表于 2023-12-26 11:01:14

{:5_95:}

liyifeng295641 发表于 2023-12-26 12:38:09

没问题

咕咕鸟1 发表于 2023-12-26 16:40:14

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

一个个都这么牛的吗

yinda_peng 发表于 2023-12-26 16:43:17

咕咕鸟1 发表于 2023-12-26 16:40
一个个都这么牛的吗

哪有……就是学了一点点爬虫做的东西{:10_329:}这个获取数据还算友好的了,没有一些反爬虫的东西,诶,话说我好像是想放github的链接来着{:10_262:}

15945179970 发表于 2024-1-5 22:05:56

15945179970 发表于 2024-1-5 22:10:11

a905448839 发表于 2024-1-9 11:17:42

666666666666

a905448839 发表于 2024-1-16 17:02:01

起飞

情话予鑫 发表于 2024-1-18 17:13:39

{:7_131:}
页: [1] 2
查看完整版本: 获取发改委发布的汽油柴油价格数据【图片】