python - 编写 JSON 文件和 Python
问题描述
下午好,我找到了一个带有解析器的代码示例,它解析站点,从那里获取文章的标题、指向它的链接和简短描述,并将这些数据写入 JSON 文件。我为我需要的网站重新做了一点,但当然一切都不能正常工作。写入后,所有文章的“title”和“desc”数据都记录相同,但“url”和“id”一切都很好,应该是这样。请帮我解决问题。我会非常感谢。
这是代码:
import json
import requests
from bs4 import BeautifulSoup
def get_first_news():
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.64"
}
url = "https://bmr.gov.ua/index.php?id=2&no_cache=1"
r = requests.get(url=url, headers=headers)
soup = BeautifulSoup(r.text, "lxml")
articles_cards = soup.find_all("div", class_="article articletype-0")
news_dict = {}
for article in articles_cards:
article_title = article.find("h3").text.strip()
article_desc = article.find("p").text.strip()
for i in soup.find_all('a', class_='more', href=True):
article_url = (f'https://bmr.gov.ua/{i["href"]}')
article_id = article_url.split("/")[-1]
# print(f"{article_title} | {article_url}")
news_dict[article_id] = {
"article_title": article_title,
"article_url": article_url,
"article_desc": article_desc
}
with open("news_dict.json", "w", encoding='utf-8') as file:
json.dump(news_dict, file, indent=4, ensure_ascii=False)
这是写入 json 的结果:
解决方案
你犯了错误for i in soup.find_all('a', class_='more', href=True):
,你应该尝试在<a class="more">
里面找到,article
但你正在里面搜索soup
。
这是工作代码:
import json
import requests
from bs4 import BeautifulSoup
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.64"
}
url = "https://bmr.gov.ua/index.php?id=2&no_cache=1"
r = requests.get(url=url, headers=headers)
soup = BeautifulSoup(r.text, "lxml")
articles_cards = soup.find_all("div", class_="article articletype-0")
news_dict = {}
for article in articles_cards:
article_title = article.find("h3").text.strip()
article_desc = article.find("p").text.strip()
for i in article.find_all('a', class_='more', href=True):
article_url = (f'https://bmr.gov.ua/{i["href"]}')
article_id = article_url.split("/")[-1]
news_dict[article_id] = {
"article_title": article_title,
"article_url": article_url,
"article_desc": article_desc}
with open("news_dict.json", "w", encoding='utf-8') as file:
json.dump(news_dict, file, indent=4, ensure_ascii=False)
如果这解决了您的问题,请不要忘记将此标记为已接受的答案。
推荐阅读
- python - 为什么 Python 中会出现 Wordcloud 错误?
- r - 将一列数字转换为日期时间
- mysql - 如何获取至少有 1 个关联行与 sequelize 的行
- javascript - CSS 动画只工作一次,之后就不再工作
- node.js - Express Js中基于角色的路由器
- vba - 使用 VBA 在 PowerPoint 中设置一张幻灯片大小/方向而不更改整个演示文稿
- python - 在 Python 中的一行上打印多行
- python - 如何让 python 在 HTML 文件中打印该程序的输出?
- google-sheets-api - getRange - copyTo 没有看到看起来像真实范围的范围
- html - jQuery追加方法问题