改变刮擦输出

问题描述 投票:0回答:1

我有一个循环,把URLs放到我的broswer中,然后刮取它的内容,产生了这样的输出。

2PRACE,0.0014

西班牙裔,0.1556

API,0.0688

黑色,0.0510

AIAN,0.0031

白色,0.7200

代码是这样的。

f1 = open('urlz.txt','r',encoding="utf8")
ethnicity_urls = f1.readlines()
f1.close()

from urllib import request
from bs4 import BeautifulSoup
import time
import openpyxl
import pprint

for each in ethnicity_urls:
    time.sleep(1)
    scraped = request.urlopen(each)
    soup = BeautifulSoup(scraped)
    soup1 = soup.select('p')
    print(soup1)
    resultFile = open('results.csv','a')
    resultFile.write(pprint.pformat(soup1))
    resultFile.close()

我的问题很简单 但我没有找到任何工具可以帮助我解决这个问题。我想把一个含有"\n "的列表的输出改为:2PRACE,0.0014 Hispanic,0.1556 API,0.0688 Black,0.0510 AIAN,0.0031 White,0.7200。

我使用replace没有成功,因为它告诉我,我把一些元素当作一个元素来处理。我这里的方法是。

for each in ethnicity_urls:
    time.sleep(1)
    scraped = request.urlopen(each)
    soup = BeautifulSoup(scraped)
    soup1 = soup.select('p')
    soup2 = soup1.replace('\n',' ')
    print(soup2)
    resultFile = open('results.csv','a')
    resultFile.write(pprint.pformat(soup2))
    resultFile.close()

你能不能帮我找到正确的方法 在将输出结果写入csv之前进行突变? 我得到的错误信息是: AttributeError: ResultSet对象没有属性'replace'。你可能把一个元素列表当作一个单一的元素。当你想调用find()时,你是否调用了find_all()?


请看我下面的回答中的问题解决方案。谢谢大家的回答

python web-scraping anaconda output
1个回答
0
投票

soup1似乎是一个可迭代的变量,所以你不能直接调用replace.相反,你可以循环浏览souple1中的所有字符串项,然后对其中的每一个都调用replace,然后将变化的字符串保存到你的souple2变量中。就像这样。

for e in soup1:
    soup2.append(e.replace('\n',' '))

0
投票

你需要在souple上迭代。

Soup是一个元素列表。

BS4文档是非常好的,有很多很多的例子。https:/www.crummy.comsoftwareBeautifulSoupbs4doc

使用 strip() 去掉 \n

for x in soup1:    
    for r in x.children:
        try:
            print(r.strip())
        except TypeError:
            pass

0
投票

谢谢两位的想法和资源。我想我可以实现你的建议。目前的构建是

for each in ethnicity_urls:
    time.sleep(1)
    scraped = request.urlopen(each)
    soup = BeautifulSoup(scraped)
    soup1 = soup.select('p')
    for e in soup1:
        soup2 = str(soup1)
        soup2 = soup2.replace('\n','')
        print(soup2)
    resultFile = open('results.csv','a')
    resultFile.write(pprint.pformat(soup2))
    resultFile.close()

而且效果还不错。我现在可以用excel做最后的调整了。

© www.soinside.com 2019 - 2024. All rights reserved.