【问题标题】:Scrape texts from multiple websites and save separately in text files从多个网站抓取文本并分别保存在文本文件中
【发布时间】:2018-10-12 10:28:09
【问题描述】:

我是python的初学者,在我的硕士论文中一直使用它来进行游戏行业的文本分析。我一直在尝试从几个游戏评论网站上搜集评论。

我在代码中使用了一个 URL 列表来抓取评论并取得了成功。不幸的是,我无法将每条评论写在单独的文件中。当我编写文件时,要么我只收到列表中最后一个 URL 对所有文件的评论,要么在更改缩进后收到所有文件中的所有评论。以下是我的代码。你能建议这里有什么问题吗?

from bs4 import BeautifulSoup
import requests

urls= ['http://www.playstationlifestyle.net/2018/05/08/ao-international-tennis-review/#/slide/1',
'http://www.playstationlifestyle.net/2018/03/27/atelier-lydie-and-suelle-review/#/slide/1',
'http://www.playstationlifestyle.net/2018/03/15/attack-on-titan-2-review-from-a-different-perspective-ps4/#/slide/1']  

for url in urls:
    r=requests.get(url).text
    soup= BeautifulSoup(r, 'lxml')
for i in range(len(urls)):
    file=open('filename%i.txt' %i, 'w')    
    for article_body in soup.find_all('p'):
        body=article_body.text
        file.write(body)
    file.close()

【问题讨论】:

    标签: python web-scraping beautifulsoup python-requests lxml


    【解决方案1】:

    我认为你只需要一个 for 循环。如果我理解正确,您只想遍历 urls 并为每个文件存储一个单独的文件。

    因此,我建议删除第二个 for 语句。不过,您需要修改 for url in urls 以获得可用于 i 的当前 url 的唯一索引,并且您可以为此使用 enumerate

    您的单个​​ for 语句将变为:

    for i, url in enumerate(urls):
    

    我自己没有对此进行测试,但我认为这应该可以解决您的问题。

    【讨论】:

    • 感谢@adambro 的回复,我相应地更改了代码,但没有收到任何输出
    • for i, url in enumerate(urls): r=requests.get(url).text soup= BeautifulSoup(r, 'lxml') for article_body in soup.find_all('p'): body=article_body.text 打印(正文)
    • 我删除了文件名代码,修复它并运行它。现在完美运行!!非常感谢@adambro 和 stackoverflow,这是一个救生员。万事如意!
    • for i, url in enumerate(urls): r=requests.get(url).text soup= BeautifulSoup(r, 'lxml') file=open('filename%i.txt' % i, 'w') for article_body in soup.find_all('p'): body=article_body.text #print(body) file.write(body) file.close()
    【解决方案2】:

    我完全相信你是 python 的初学者。在解释之前我先发布正确的。

    for i,url in enumerate(urls):
        r = requests.get(url).text
        soup = BeautifulSoup(r, 'lxml')
        file = open('filename{}.txt'.format(i), 'w')
        for article_body in soup.find_all('p'):
            body = article_body.text
            file.write(body)
        file.close()
    

    i receive only the review from the last URL in the list to all the files的原因

    一个变量对应一个值,所以在for循环结束后你会得到最后一个结果(第三个)。第一个和第二个结果的结果将被覆盖

    for url in urls:
        r = requests.get(url).text
        soup = BeautifulSoup(r, 'lxml') 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-14
      • 1970-01-01
      • 2022-11-26
      • 2020-06-16
      • 1970-01-01
      相关资源
      最近更新 更多