我使用机械化来获取雅虎搜索的最佳结果并从中获取废品数据,但是雅虎只提供了脏兮兮,这会给进一步处理带来错误,是否有获得原始链接的解决方案?
示例:对于结果stackoverflow.com,我得到以下标记
<a
dirtyhref="http://r.search.yahoo.com/_ylt=A0SO8zEuKGZUteYAEHRXNyoA;_ylu=X3oDMTEzODh2cDk0BHNlYwNzcgRwb3MDMQRjb2xvA2dxMQR2dGlkA1ZJUDI0NF8x/RV=2/RE=1416009903/RO=10/RU=http%3a%2f%2fstackoverflow.com%2f/RK=0/RS=a.mWRIy6IMjJQysgixByd8053hE-"
id="link-1" class="yschttl spt" href="http://r.search.yahoo.com/_ylt=A0SO8zEuKGZUteYAEHRXNyoA;_ylu=X3oDMTEzODh2cDk0BHNlYwNzcgRwb3MDMQRjb2xvA2dxMQR2dGlkA1ZJUDI0NF8x/RV=2/RE=1416009903/RO=10/RU=http%3a%2f%2fstackoverflow.com%2f/RK=0/RS=a.mWRIy6IMjJQysgixByd8053hE-" target="_blank" data-bk="5054.1">
<b>Stack Overflow</b> - Official Site
</a>
答案 0 :(得分:2)
假设您可以轻松隔离dirtyhref
的内容(您可以使用BeautifulSoup
来解析链接http://www.crummy.com/software/BeautifulSoup/bs4/doc/),您可以使用urlparse
包来获取只有路径(https://docs.python.org/2/library/urlparse.html#urlparse.urlparse)。现在你将它放在一个字符串中:
dirty_href = "/_ylt=A0SO8zEuKGZUteYAEHRXNyoA;_ylu=X3oDMTEzODh2cDk0BHNlYwNzcgRwb3MDMQRjb2xvA2dxMQR2dGlkA1ZJUDI0NF8x/RV=2/RE=1416009903/RO=10/RU=http%3a%2f%2fstackoverflow.com%2f/RK=0/RS=a.mWRIy6IMjJQysgixByd8053hE-"\
现在,我认为字段由/
分隔,因此您可以:
fields = dirty_href.split('/')
假设您感兴趣的字段始终是第六个:
dirty_url = fields[5].split('=')[1]
最后,您可以使用unquote
包中的urllib2
(https://docs.python.org/2/library/urllib.html#urllib.unquote):
>>> urllib2.unquote(dirty_url)
'http://stackoverflow.com/'
您也不能假设该网址始终位于第六个字段中,方法是在fields
上骑行,并检查它是否以RU=
开头。