区分相关和不相关的网址

时间:2015-05-09 03:20:46

标签: python url python-3.x web-scraping

所以我正在尝试编写一个程序来生成并打开我在程序中放入的新闻站点列表中的随机新闻文章。我这样做的方法是从每个网站的首页拉出所有网址链接,然后随机选择一个打开。但是,有一些网址是无关紧要的,并没有与新闻文章相关联,我正在尝试考虑过滤它们的好方法。你们有什么建议吗?现在我通过检查url是否包含首页的url来过滤它们,它会处理一些但不是所有不相关的URL。它还根据我正在搜索的网站过滤掉了很多新闻文章。这是代码供参考。

    import webbrowser
    import urllib.request
    import random
    from bs4 import BeautifulSoup

    news_sites_list = ["http://www.bbc.com","http://www.wired.com","http://www.howstuffworks.com","http://www.slashdot.org", "http://www.vice.com", "http://noisey.vice.com", "http://thecreatorsproject.vice.com"]

    def random_web_getter(newslist):
        randomlim = len(newslist)
        url = newslist[random.randint(0,randomlim-1)]
        connection = urllib.request.urlopen(url)
        html = connection.read()
        soup = BeautifulSoup(html)
        links = soup.find_all('a')
        linklist = []
        for tag in links:
            link = tag.get('href', None)
            if link != None and url in link:
                linklist.append(link)
        return linklist[random.randint(0, len(linklist)-1)]
        webbrowser.open(random_web_getter(news_sites_list), 1, True)

1 个答案:

答案 0 :(得分:0)

为什么不从每个网站获取RSS提要而只是使用它?这是BBC“Top Stories”提要的一个示例,它返回一个XML文档。我正在使用请求,bs4和webbrowser模块:

>>> page = requests.get('http://feeds.bbci.co.uk/news/rss.xml')
>>> links = bs4.BeautifulSoup(page.text).find_all('link')
>>> print links[0].text
http://www.bbc.co.uk/news/business-32655943#sa-ns_mchannel=rss&ns_source=PublicRSS20-sa
>>> webbrowser.open(links[0].text)

我现在有一个开放的网络浏览器,其中显示了RSS源中的第一个链接。