明明我原封不动地把例题打下来还是会报错?
import urllib.requestimport urllib.parse
import re
from bs4 import BeautifulSoup
def main() :
keyword = input("请输入关键字")
keyword = urllib.parse.urlencode({'word':keyword})
response = urllib.request.urlopen('http://baike.baidu.com/search/word?%s'%keyword)
html = response.read().decode()
soup = BeautifulSoup(html,'html.parser')
for each in soup.find_all(href = re.compile('view')) :
content = ''.join()
url2 = ''.join(['http://baike.baidu.com',each['href']])
response2 = urllib.request.urlopen(url2)
html2 = response2.read()
soup2 = BeautifulSoup(html2,'html.parser')
if soup2.h2 :
content = ''.join()
print(content)
if __name__ == '__main__' :
main()
我按照课后题原文输入,为什么还是报错:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 36-39: ordinal not in range(128) 输入的是中文?编码好像有问题 shake_a_tree@16 发表于 2020-1-27 20:43
输入的是中文?编码好像有问题
不是吖,问题是出现在第二个urlopen上的,其他的我试了,都是没问题的。但我不知道为什么第二个urlopen会出错。 1这个错误是由编码格式引起
2现在几乎没有人用urllib这个模块了 dweiyuan 发表于 2020-1-27 23:52
不是吖,问题是出现在第二个urlopen上的,其他的我试了,都是没问题的。但我不知道为什么第二个urlopen会 ...
urlopen会转码的,所以出问题了 import urllib.request
import urllib.parse
import re
from bs4 import BeautifulSoup
def main():
keyword = input("请输入关键词:")
keyword = urllib.parse.urlencode({"word":keyword})
url = "http://baike.baidu.com/search/word?{0}".format(keyword)
# print(' --> {0}'.format(url))
response = urllib.request.urlopen(url)
html = response.read()
soup = BeautifulSoup(html, "html.parser")
for each in soup.find_all(href=re.compile("view")):
content = ''.join()
root_url = "http://baike.baidu.com"
href_url = each["href"]
url2 = urllib.parse.urljoin(root_url, href_url)
# print(' --> {0}'.format(url2))
url2 = urllib.parse.quote(url2, safe=':/?#&')
response2 = urllib.request.urlopen(url2)
html2 = response2.read()
soup2 = BeautifulSoup(html2, "html.parser")
if soup2.h2:
content = ''.join()
decode_url = urllib.parse.unquote(url2)
decode_url = urllib.parse.unquote(decode_url)
content = ''.join()
print(content)
if __name__ == "__main__":
main()
wp231957 发表于 2020-1-28 11:40
1这个错误是由编码格式引起
2现在几乎没有人用urllib这个模块了
请问,现在用什么获取网络请求比较方便
XiaoPaiShen 发表于 2020-1-30 12:27
请问,urllib.parse.quote() 函数的safe参数怎么使用 safe参数指定的字符串中包含的字符不会被转换 XiaoPaiShen 发表于 2020-2-4 21:31
safe参数指定的字符串中包含的字符不会被转换
谢谢。
但是?#/之类的符号不就本来就是ASCII字符吗,为什么还要把它们放在safe里?
dweiyuan 发表于 2020-2-5 17:57
谢谢。
但是?#/之类的符号不就本来就是ASCII字符吗,为什么还要把它们放在safe里?
在url中,#/ 会被编码的,
#:%2f
/:%23
如果不想被编码,就把不想编码的字符赋給 safe
页:
[1]