dweiyuan 发表于 2020-1-27 17:52:51

明明我原封不动地把例题打下来还是会报错?

import urllib.request
import 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:49

输入的是中文?编码好像有问题

dweiyuan 发表于 2020-1-27 23:52:41

shake_a_tree@16 发表于 2020-1-27 20:43
输入的是中文?编码好像有问题

不是吖,问题是出现在第二个urlopen上的,其他的我试了,都是没问题的。但我不知道为什么第二个urlopen会出错。

wp231957 发表于 2020-1-28 11:40:13

1这个错误是由编码格式引起
2现在几乎没有人用urllib这个模块了

shake_a_tree@16 发表于 2020-1-28 19:52:26

dweiyuan 发表于 2020-1-27 23:52
不是吖,问题是出现在第二个urlopen上的,其他的我试了,都是没问题的。但我不知道为什么第二个urlopen会 ...

urlopen会转码的,所以出问题了

XiaoPaiShen 发表于 2020-1-30 12:27:14

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()

dweiyuan 发表于 2020-2-3 21:30:44

wp231957 发表于 2020-1-28 11:40
1这个错误是由编码格式引起
2现在几乎没有人用urllib这个模块了

请问,现在用什么获取网络请求比较方便

dweiyuan 发表于 2020-2-4 18:11:06

XiaoPaiShen 发表于 2020-1-30 12:27


请问,urllib.parse.quote() 函数的safe参数怎么使用

XiaoPaiShen 发表于 2020-2-4 21:31:41

safe参数指定的字符串中包含的字符不会被转换

dweiyuan 发表于 2020-2-5 17:57:25

XiaoPaiShen 发表于 2020-2-4 21:31
safe参数指定的字符串中包含的字符不会被转换

谢谢。
但是?#/之类的符号不就本来就是ASCII字符吗,为什么还要把它们放在safe里?

XiaoPaiShen 发表于 2020-2-6 04:36:27

dweiyuan 发表于 2020-2-5 17:57
谢谢。
但是?#/之类的符号不就本来就是ASCII字符吗,为什么还要把它们放在safe里?

在url中,#/ 会被编码的,
#:%2f   
/:%23

如果不想被编码,就把不想编码的字符赋給 safe
页: [1]
查看完整版本: 明明我原封不动地把例题打下来还是会报错?