4

我正在使用以下代码抓取新闻网站以获取新闻文章:

import mechanize
from selenium import webdriver
from bs4 import BeautifulSoup

url = "http://www.thehindu.com/archive/web/2012/06/19/"

link_dictionary = {}
driver = webdriver.Firefox()
driver.get(url)
soup = BeautifulSoup(driver.page_source)

for tag_li in soup.findAll('li', attrs={"data-section":"Editorial"}):
    for link in tag_li.findAll('a'):
        link_dictionary[link.string] = link.get('href')
        print link_dictionary[link.string]
        urlnew = link_dictionary[link.string]

        brnew =  mechanize.Browser()
        htmltextnew = brnew.open(urlnew).read()

        articletext = ""
        soupnew = BeautifulSoup(htmltextnew)
        for tag in soupnew.findAll('p'):
            articletext += tag.text
        print articletext


driver.close()

我得到了想要的结果,但我想在一行中写一篇特定的新闻文章。对于某些文章,我将整篇文章放在一行中,而在其他文章中,我得到不同的段落。有人可以帮我解决问题吗?我是 python 编程的新手。谢谢并恭祝安康。

4

1 回答 1

1

这可能与特定站点的 HTML 中管理空白的方式有关,以及并非所有站点都会对其内容使用“p”标签这一事实。您最好的选择可能是进行正则表达式替换,以消除多余的空格(包括换行符)。

在文件的开头,导入正则表达式模块

import re

然后,在您构建了 articletext 之后,添加以下代码:

print re.sub('\s+', ' ', articletext, flags=re.M)

您可能还想从可能包含在其中的其他元素中提取文本。

于 2013-11-12T07:23:40.663 回答