网络报废:雅虎提供dirtyurl而不是普通的u

2024-05-19 15:20:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我用mechanize从yahoo搜索中获取最热门的搜索结果并从中删除数据,但是yahoo只提供dirtyurl,这在进一步处理时会出错,有没有解决方法来获取原始链接?在

示例:对于结果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>

所以这里 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-

表示http://stackoverflow.com


Tags: recomhttpsearchroruyahoork
1条回答
网友
1楼 · 发布于 2024-05-19 15:20:18

假设您可以轻松地隔离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-"\

现在,在我看来,字段是用/分隔的,因此您可以:

^{pr2}$

假设您感兴趣的字段总是第六个:

dirty_url = fields[5].split('=')[1]

最后,您可以使用urllib2包(https://docs.python.org/2/library/urllib.html#urllib.unquote)中的unquote

>>> urllib2.unquote(dirty_url)
'http://stackoverflow.com/'

也不能假设URL总是在第六个字段中,方法是在fields上循环并检查它是否以RU=开头。在

相关问题 更多 >