【问题标题】:Writing URLs via Beautifulsoup to a csv file vertically通过 Beautifulsoup 将 URL 垂直写入 csv 文件
【发布时间】:2020-01-12 13:49:20
【问题描述】:

我的一个大学课程项目要求我从美国人口普查局网站上的一个页面中提取所有 URL,并将它们存储在 CSV 文件中。在大多数情况下,我已经想出了如何做到这一点,但由于某种原因,当数据被附加到 CSV 文件时,所有条目都被水平插入。我希望数据垂直排列,这意味着第 1 行包含列表中的第一项,第 2 行包含第二项,依此类推。我尝试了几种方法,但数据总是以水平表示形式结束。我是 python 新手,显然对语言没有足够的把握来解决这个问题。任何帮助将不胜感激。

我正在使用 Beautifulsoup4 和请求库解析网站。从网站中提取所有的“a”标签非常容易,并且将这些“a”标签中的 URL 放入列表中也很清楚。但是,当我使用 writerow 函数将列表附加到我的 CSV 文件时,所有数据都以一行结束,而不是每个 URL 单独一行。

import requests
import csv
requests.get
from bs4 import BeautifulSoup
from pprint import pprint

page = requests.get('https://www.census.gov/programs-surveys/popest.html')

soup = BeautifulSoup(page.text, 'html.parser')

## Create Link to append web data to
links = []

# Pull text from all instances of <a> tag within BodyText div
AllLinks = soup.find_all('a')

for link in AllLinks:
    links.append(link.get('href'))

with open("htmlTable.csv", "w") as f:
    writer = csv.writer(f)
    writer.writerow(links)

pprint(links)

【问题讨论】:

  • 请添加您的导入以使其成为一个完整的示例

标签: python csv beautifulsoup


【解决方案1】:

试试这个:

import requests
import csv
from bs4 import BeautifulSoup
page = requests.get('https://www.census.gov/programs-surveys/popest.html')

soup = BeautifulSoup(page.text, 'html.parser')
## Create Link to append web data to
links = []

# Pull text from all instances of <a> tag within BodyText div
AllLinks = soup.find_all('a')

for link in AllLinks:
    links.append(link.get('href'))

with open("htmlTable.csv", "w") as f:
    writer = csv.writer(f)
    for link in links:
        if (isinstance(link, str)):
            f.write(link + "\n",)

我对其进行了更改以检查给定链接是否确实是字符串,如果是,则在其后添加换行符。

【讨论】:

  • 感谢马修!
【解决方案2】:

尝试通过在列表中附加 url 来制作列表列表

links.append([link.get('href')])

然后 csv 编写器会将每个列表与 writerows 放在一个新行

writer.writerows(links)

【讨论】:

    猜你喜欢
    • 2022-01-08
    • 2014-10-06
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2016-08-03
    • 2022-01-12
    • 2020-01-08
    相关资源
    最近更新 更多