Соскрести тексты с нескольких веб-сайтов и сохранить отдельно в текстовых файлах - PullRequest
0 голосов
/ 12 октября 2018

Я новичок в 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()

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Я полностью верю, что вы новичок в питоне.Я пишу правильную, прежде чем объяснить.

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') 
0 голосов
/ 12 октября 2018

Я думаю, вам нужен только один для цикла.Если я правильно понимаю, вам нужно только перебрать urls и сохранить отдельный файл для каждого.

Поэтому я бы предложил удалить второй оператор for.Однако тогда вам нужно изменить for url in urls, чтобы получить уникальный индекс для текущего URL, который вы можете использовать для i, и вы можете использовать enumerate для этого.

Ваш единственный оператор for будетстать:

for i, url in enumerate(urls):

Я сам не проверял это, но я уверен, что именно это должно решить вашу проблему.

...