2017-04-06 74 views
0

我想凑一个网页的文本,并将其输出作为每个是由文本的句子/段落的话组成的一个字符串。不过,我似乎无法连接各个句子/段落。我想也许这是因为空白或换行符,但试图在相同的问题中删除这些结果。网页抓取到单用户模式字符串与Python

有人可以看看我的代码并解释我做错了什么吗? (解释是超级有用的,这样我可以完全理解你的指正。)

这里是我的代码:

import requests, re, json 
from bs4 import BeautifulSoup 

urls = ['http://t24.com.tr/haber/suriyelilere-vatandasliga-neden-karsi-cikiliyor,348652', 'http://t24.com.tr/haber/oteki-suriyeliler-turkiye-vatandasi-olursak-askere-gideriz-akpye-oy-verir-miyim-bilmiyorum,349206', 'http://t24.com.tr/haber/konyada-turklerle-suriyeliler-arasinda-kopege-niye-tekme-attin-kavgasi-3-olu-2-yarali,349208'] 


for url in urls: 
    html = requests.get(url).text 
    soup = BeautifulSoup(html, "html.parser") 

paragraphs = soup.findAll('p', {"class" : "p1"}) 
for p in paragraphs: 
    text = p.text.replace(',', '').replace('"', '').replace('.', '').replace("'", "").replace('?', '').replace("\n", "").replace('\r', '') 
    print(text) 

我的输出目前看起来是这样的:

Selin Girit                            
Kendi ülkesinde savaştan kaçacak sınavsız okula girip askerlik yapmayacak 10 yıl sonra benden iyi yaşayacak #ÜlkemdeSuriyeliİstemiyorum     
Cumhurbaşkanı Recep Tayyip Erdoğanın Türkiyede yaşayan Suriyeli mültecilere 

当我想是这个:

Selin Girit Kendi ülkesinde savaştan kaçacak sınavsız okula girip askerlik yapmayacak 10 yıl sonra benden iyi yaşayacak #ÜlkemdeSuriyeliİstemiyorum Cumhurbaşkanı Recep Tayyip Erdoğanın Türkiyede yaşayan Suriyeli mültecilere 

回答

0

首先:你在为每个厕所的每个网址创建一个新的汤然后再对每一种汤做任何事情。因此,使用您的代码,您只能从urls中的最后一个网址获取文本。你应该做的第一件事是把段落循环放在url-loop中。

soup.findAll()返回迭代器,paragraphs,可以在页面的所有P标签。您可以循环之前段落创建一个空字符串,full_string,然后每个段落添加到这个空字符串得到你想要的结果。如下。

for url in urls: 
    html = requests.get(url).text 
    soup = BeautifulSoup(html, "html.parser") 

    full_text = '' 
    paragraphs = soup.findAll('p', {"class" : "p1"}) 
    for p in paragraphs: 
     text = p.text.replace(',', '').replace('"', '').replace('.', '').replace("'", "").replace('?', '').replace("\n", "").replace('\r', '') 
     full_text += text 

    print text