Python中有一个教程问题会随机跳转英文维基百科的页面:
from urllib.request import urlopen
from bs4 import BeautifulSoup
import re
pages = set()
def getLinks(pageUrl):
global pages
html = urlopen('http://en.wikipedia.org{}'.format(pageUrl))
bs = BeautifulSoup(html, 'html.parser')
for link in bs.find_all('a', href=re.compile('^(/wiki/)')):
if 'href' in link.attrs:
if link.attrs['href'] not in pages:
#We have encountered a new page
newPage = link.attrs['href']
print(newPage)
pages.add(newPage)
getLinks(newPage)
getLinks('')
一切都很好。但是,如果我尝试使用俄语 wiki 作为基本 URL:
html = urlopen('http://ru.wikipedia.org/wiki/Заглавная_страница{}'.format(pageUrl))
然后抛出错误消息:UnicodeEncodeError:
“ascii”编解码器无法编码字符
分支
我读。还有一个问题:
- 转换 URL -> cp1251
- 我正好相反:utf8 -> URL
最好以时尚现代的方式请求页面
requests,他会自己弄清楚编码,BS如果你给他页面,他也会弄清楚content,然后以“人类”形式打印 -URL你可以通过unquote:其余代码没有改变。
样本输出:
使用引号替换西里尔字母
然后
url会有这样的一行:例子: