myqf123 发表于 2021-12-28 16:00:03

求解惑

本帖最后由 myqf123 于 2021-12-28 16:01 编辑

import urllib.request
import urllib.parse
import re
from bs4 import BeautifulSoup
import random
import time

def main():
##    keyword = input("请输入关键词:")
    keyword = urllib.parse.urlencode({"word":'猪八戒'})
   
    url = ("http://baike.baidu.com/search/word?%s" % keyword)
    iplist = ['113.28.90.67:9480']
    proxy_support = urllib.request.ProxyHandler({'http':random.choice(iplist)})
    opener = urllib.request.build_opener(proxy_support)
    opener.addheaders = [('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36')]
    urllib.request.install_opener(opener)
   
    response = urllib.request.urlopen(url)
    html = response.read().decode('UTF-8')
    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().decode('UTF-8')
      soup2 = BeautifulSoup(html2,"html.parser")            #从网页抓取数据
      if soup2:
            content = ''.join()
      content = ''.join()
      print(content)
      time.sleep(3)

if __name__ == "__main__":
    main()


运行结果总是:UnicodeEncodeError: 'ascii' codec can't encode characters in position 58-61: ordinal not in range(128)
求问题出在哪里了?

阿萨德按时 发表于 2021-12-29 08:30:20

{:10_254:}

阿萨德按时 发表于 2021-12-29 13:42:39

{:10_279:}

AdiosSpike 发表于 2021-12-29 13:55:07

抱歉,不会,帮顶

AdiosSpike 发表于 2021-12-29 13:56:39

抱歉,不会,帮顶,顺便领鱼币

阿萨德按时 发表于 2021-12-29 14:55:21

{:10_279:}

z5560636 发表于 2021-12-29 15:06:27

iplist = ['113.28.90.67:9480']
# 改成
iplist = [['113.28.90.67:9480'] ]

zhsguitar 发表于 2021-12-29 21:10:40


抱歉,不会,帮顶,顺便领鱼币

zhsguitar 发表于 2021-12-29 21:11:14

{:10_257:}

myqf123 发表于 2021-12-29 23:20:10

z5560636 发表于 2021-12-29 15:06


试过了,没用

myqf123 发表于 2021-12-29 23:20:41

AdiosSpike 发表于 2021-12-29 13:55
抱歉,不会,帮顶

谢谢

myqf123 发表于 2021-12-29 23:21:11

zhsguitar 发表于 2021-12-29 21:10
抱歉,不会,帮顶,顺便领鱼币

谢谢

ohhohh 发表于 2021-12-30 08:37:29

{:10_254:}

z5560636 发表于 2021-12-30 10:17:04

myqf123 发表于 2021-12-29 23:20
试过了,没用

我是帮你排错,不是帮你管代理有没有用的问题。

伏惜寒 发表于 2021-12-30 10:21:14

本帖最后由 伏惜寒 于 2021-12-30 10:31 编辑

问题1:urllib这个模块其实已经有点过时了,不推荐在现在的环境中使用,如果要学爬虫,建议用requests库

问题2:urllib.request.urlopen(url2)这个方法不支持中文url,这是你代码中打印出来的url,可以看到第二个url包含中文,这个方法无法解析,需要对中文进行转码
1http://baike.baidu.com/search/word?word=%E7%8C%AA%E5%85%AB%E6%88%92
2http://baike.baidu.com/wikicategory/view?categoryName=恐龙大全
使用这个方法转码urllib.parse.quote("恐龙大全")

问题3:后面的信息获取也写错了,因为不知道你要什么信息,我就没改了,你自己看着玩吧。
import urllib.request
import urllib.parse
import re
from bs4 import BeautifulSoup
import random
import time

def main():
##    keyword = input("请输入关键词:")
    keyword = urllib.parse.urlencode({"word":'猪八戒'})
   
    url = ("http://baike.baidu.com/search/word?%s" % keyword)
    iplist = ['113.28.90.67:9480']
    proxy_support = urllib.request.ProxyHandler({'http':random.choice(iplist)})
    opener = urllib.request.build_opener(proxy_support)
    opener.addheaders = [('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36')]
    urllib.request.install_opener(opener)
    print(url)
    response = urllib.request.urlopen(url)
    html = response.read().decode('UTF-8')
    soup = BeautifulSoup(html,"html.parser")

    for each in soup.find_all(href=re.compile("view")):
      content = ''.join()
      #对中文字符进行转码
      href = urllib.parse.quote(each["href"])
      #urllib.request.urlopen中只有转码后的中文才能作为参数传入进去
      url2 = ''.join(["http://baike.baidu.com",href])
      print(url2)
      response2 = urllib.request.urlopen(url2)
      html2 = response2.read().decode('UTF-8')
      soup2 = BeautifulSoup(html2,"html.parser")            #从网页抓取数据
      if soup2:
            #soup2是返回的网页信息,content是"恐龙百科"
            #.join()这个方法写错了
            #我不知道你要什么信息所以后面我没改了
            content = ''.join()
      content = ''.join()
      print(content)
      time.sleep(3)

if __name__ == "__main__":
    main()


备注:建议你学习lxml模块+requests模块,一般的爬虫这两个模块就能解决了,比你用的模块容易很多

万恶的亚撒西 发表于 2021-12-30 10:21:41

{:5_99:}

伽羅~ 发表于 2021-12-30 14:56:33

{:10_254:}

别吃我饼干 发表于 2021-12-30 16:50:04

BANG

myqf123 发表于 2021-12-30 19:36:43

伏惜寒 发表于 2021-12-30 10:21
问题1:urllib这个模块其实已经有点过时了,不推荐在现在的环境中使用,如果要学爬虫,建议用requests库

...

content = ''.join()这个要怎么改呢,这样做的目的是要关于猪八戒的副标题的内容?

小bai学c 发表于 2021-12-31 09:23:01

{:10_254:}
页: [1] 2 3
查看完整版本: 求解惑