1

美しいスープを使ってアトム ベースの RSS フィードをスクレイピングしようとしていますが、難しいことがわかりました。データのキャプチャは<item>、コードが壊れてスクリプトがクラッシュするまで問題なく実行されます。そのような<item>s には一貫して "& lt;" のようなタグがあります (firefox はそれらをオレンジ色でマークします)。または "& quot;" ですが、それらがなくても問題なく動作します。BeautifulStoneSoup のようなものを試してみたり、正規表現で特殊文字を削除したり、「xml」引数を設定したりしましたが、何も機能せず、多くの場合、BS4 で非推奨であるという警告がスローされます。

これらの文字が表示される理由と、それらに効果的に対処するにはどうすればよいですか?

これは私がスクレイピングしようとしているページです: http://www.thestar.com/feeds.articles.news.gta.rss

そして、ここに私のコードがあります:

news_url = "http://www.thestar.com/feeds.articles.news.gta.rss" # Toronto Star RSS Feed

try:    
    news_rss = urllib2.urlopen(news_url)
    news = news_rss.read()
    news_rss.close()
    soup = BeautifulSoup(news)
except:
    return "error"

titles = soup.findAll('title')
links = soup.findAll('link')

for link in links:
    link = link.contents    # I want the url without the <link> tags

news_stuff = []
for item in titles:
    if item.text == "TORONTO STAR | NEWS | GTA":    # These have <title> tags and I don't want them; just skip 'em.
        pass
    else:
        news_stuff.append((item.text, links[i]))    # Here's a news story.  Grab it.

i = 0
for thing in news_stuff:
    print '<a href="' 
    print thing[1]
    print '"target="_blank">' 
    print thing[0]
    print '</a><br/>'
    i += 1
4

2 に答える 2

1

これが私が試したもので、クラッシュしませんでした。

from string import punctuation, whitespace
import urllib2
import datetime
import re
import MySQLdb
import csv
from bs4 import BeautifulSoup as Soup
news_url = "http://www.thestar.com/feeds.articles.news.gta.rss" # Toronto Star RSS Feed

news_rss = urllib2.urlopen(news_url)
news = news_rss.read()
news_rss.close()
soup = Soup(news)

titles = soup.findAll('title')
links = soup.findAll('link')

for link in links:
    link = link.contents    # I want the url without the <link> tags
i=0
news_stuff = []
for item in titles:
    if item.text == "TORONTO STAR | NEWS | GTA":    # These have <title> tags and I don't want them; just skip 'em.
        pass
    else:
        news_stuff.append((item.text, links[i]))    # Here's a news story.  Grab it.

i = 0
for thing in news_stuff:
    print '<a href="' 
    print thing[1]
    print '"target="_blank">' 
    print thing[0]
    print '</a><br/>'
    i += 1

そして、ここに私が出力として得ているものがあります

<a href="
<link>http://www.thestar.com/feeds.articles.news.gta.rss</link>
"target="_blank">
TTC argues for return of special constables
</a><br/>
<a href="
<link>http://www.thestar.com/feeds.articles.news.gta.rss</link>
"target="_blank">
Health information of 18,000 people stolen in Peel Region
</a><br/>
<a href="
<link>http://www.thestar.com/feeds.articles.news.gta.rss</link>
"target="_blank">
Fire closes Bathurst St. south of Dupont
</a><br/>
<a href="
<link>http://www.thestar.com/feeds.articles.news.gta.rss</link>
"target="_blank">
Empty tanker train cars derail in Brampton
</a><br/>
<a href="
<link>http://www.thestar.com/feeds.articles.news.gta.rss</link>
"target="_blank">
Medical illustration studios flourish in Toronto
</a><br/>
<a href="
<link>http://www.thestar.com/feeds.articles.news.gta.rss</link>
"target="_blank">
In Texas, Toronto music leaders urge city hall to say ‘yes’
</a><br/>
<a href="
<link>http://www.thestar.com/feeds.articles.news.gta.rss</link>
"target="_blank">
Making sense of the Sammy Yatim shooting: Fiorito
</a><br/>
<a href="
<link>http://www.thestar.com/feeds.articles.news.gta.rss</link>
"target="_blank">
Toronto’s chief planner, Jennifer Keesmaat, challenges Mirvish/Gehry scheme: Hume
</a><br/>
<a href="
<link>http://www.thestar.com/feeds.articles.news.gta.rss</link>
"target="_blank">
Westbound Gardiner lanes reopen after rollover near Spadina
</a><br/>
<a href="
<link>http://www.thestar.com/feeds.articles.news.gta.rss</link>
"target="_blank">
Daycare Crisis: Halton health complaints show gaps in unlicensed care
</a><br/>
<a href="
<link>http://www.thestar.com/feeds.articles.news.gta.rss</link>
"target="_blank">
Witness describes shooting details as man confronted police near van
</a><br/>
<a href="
<link>http://www.thestar.com/feeds.articles.news.gta.rss</link>
"target="_blank">
Muslim AIDS activist honoured for taboo-busting work
</a><br/>
<a href="
<link>http://www.thestar.com/feeds.articles.news.gta.rss</link>
"target="_blank">
Death to death with dignity: DiManno
</a><br/>
<a href="
<link>http://www.thestar.com/feeds.articles.news.gta.rss</link>
"target="_blank">
Rockers join forces in Line 9 protest
</a><br/>
<a href="
<link>http://www.thestar.com/feeds.articles.news.gta.rss</link>
"target="_blank">
Could you eat 10 pizzas in 12 minutes? This guy did
</a><br/>
<a href="
<link>http://www.thestar.com/feeds.articles.news.gta.rss</link>
"target="_blank">
Former participants speak up about gay healing program
</a><br/>
<a href="
<link>http://www.thestar.com/feeds.articles.news.gta.rss</link>
"target="_blank">
Freed Canadians Tarek Loubani and John Greyson awaiting papers to come home from Egypt
</a><br/>
<a href="
<link>http://www.thestar.com/feeds.articles.news.gta.rss</link>
"target="_blank">
Man dies after crash at Finch and Dufferin
</a><br/>
<a href="
<link>http://www.thestar.com/feeds.articles.news.gta.rss</link>
"target="_blank">
Nuit Blanche lights up Toronto Saturday night
</a><br/>
<a href="
<link>http://www.thestar.com/feeds.articles.news.gta.rss</link>
"target="_blank">
Leafs fans celebrate home opener at Maple Leaf Square
</a><br/>
于 2013-10-07T19:47:53.477 に答える