【问题标题】:Why does my web scraper write everything into a single line为什么我的网络爬虫将所有内容写入一行
【发布时间】:2021-10-26 19:47:03
【问题描述】:

完全的新手,但我已经成功地使用 Python 从上游代码创建的链接列表中抓取 EAN 数字。但是,我的输出文件将所有抓取的数字包含为连续的单行,而不是每行一个 EAN。

这是我的代码 - 它有什么问题? (已删除的 URL 已编辑)

import requests
from bs4 import BeautifulSoup
import urllib.request
import os

subpage = 1

while subpage <= 2:
    URL = "https://..." + str(subpage)
    page = requests.get(URL)
    soup = BeautifulSoup(page.content, "html.parser")

    """writes all links under the h2 tag into a list"""
    links = []
    h2s = soup.find_all("h2")
    for h2 in h2s:
        links.append("http://www.xxxxxxxxxxx.com" + h2.a['href'])

    """opens links from list and extracts EAN number from underlying page"""
    with open("temp.txt", "a") as output:
        for link in links:
            urllib.request.urlopen(link)
            page_2 = requests.get(link)
            soup_2 = BeautifulSoup(page_2.content, "html.parser")
            if "EAN:" in soup_2.text:
                span = soup_2.find(class_="articleData_ean")
                EAN = span.a.text
                output.write(EAN)
        subpage += 1

os.replace('temp.txt', 'EANs.txt')

【问题讨论】:

    标签: python python-3.x web-scraping


    【解决方案1】:

    output.write(EAN) 正在编写每个 EAN,它们之间没有任何内容。它不会自动添加分隔符或换行符。您可以添加换行符:output.write('\n') 或逗号等来分隔它们

    【讨论】:

    • 在发布我的问题之前,我对 \n 进行了修改,但我无法弄清楚如何正确使用它。我仍然对您的回答有这个问题,因为 '\n' 位于 EAN 变量所在的位置(如果 'variable' 在这里是正确的词......)。如何将其添加到上面的代码中?
    • 如果EAN 是一个字符串,你可以使用output.write(EAN + '\n')。如果没有,只需在现有输出下方添加另一行和output.write('\n')
    • 谢谢,这行得通。这是一个不同的问题,但是您是否知道我需要如何修改代码以将输出写入每个 500 行长的单独文件中?具有系统的文件名,例如“filename_001-500”; “文件名_501-1000; ...等等?
    猜你喜欢
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 2022-01-16
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多