鱼C论坛

 找回密码
 立即注册
查看: 3329|回复: 13

课后55讲:隐藏 这一讲有作业给到的答案直接无法运行

[复制链接]
发表于 2021-7-20 18:57:20 | 显示全部楼层 |阅读模式
60鱼币
本帖最后由 chuangyuemx 于 2021-7-24 20:46 编辑

[课后作业] 第055讲:论一只爬虫的自我修养3:隐藏 | 课后测试题及答案


这题目前的答案已无法运行,能否更新下答案并给些注释呢?


1. 直接打印词条名和链接不算什么真本事儿,这题要求你的爬虫允许用户输入搜索的关键词。
然后爬虫进入每一个词条,然后检测该词条是否具有副标题(比如搜索“猪八戒”,副标题就是“(中国神话小说《西游记》的角色)”),如果有,请将副标题一并打印出来:

QQ图片20210720225220.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-20 19:41:48 | 显示全部楼层
能不能发一下你的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-20 21:12:38 | 显示全部楼层
"论一只爬虫的自我修养" ?  nb,哈哈哈,自己慢慢修吧~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-21 09:41:35 | 显示全部楼层


看下这里吧,大致是这么个意思:

[已解决] 055课 爬百度百科“网络爬虫”的词条 问题
https://fishc.com.cn/thread-169631-1-1.html
(出处: 鱼C论坛)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-7-21 12:43:56 | 显示全部楼层
Twilight6 发表于 2021-7-21 09:41
看下这里吧,大致是这么个意思:

[已解决] 055课 爬百度百科“网络爬虫”的词条 问题

这个解决的是动动手第0题的问题哈,这题我会。我的问题是动动手的第1题哈,我想了半天 搜了半天也没整出来,所以来求助。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-7-21 12:47:56 | 显示全部楼层
阿奇_o 发表于 2021-7-20 21:12
"论一只爬虫的自我修养" ?  nb,哈哈哈,自己慢慢修吧~

前面学习我都感觉还好,到了爬虫这,因为很多网站都变化了,学习就开始需要高人点拨了,这个时候自学有鸭梨。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-7-21 12:50:02 | 显示全部楼层
jxd12345 发表于 2021-7-20 19:41
能不能发一下你的代码

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()
    soup = BeautifulSoup(html, "html.parser")

    for each in soup.find_all(href=re.compile("view")):
        content = ''.join([each.text])
        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([content, soup2.h2.text])
        content = ''.join([content, " -> ", url2])
        print(content)

if __name__ == "__main__":
    main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-7-21 12:50:44 | 显示全部楼层
jxd12345 发表于 2021-7-20 19:41
能不能发一下你的代码

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()
    soup = BeautifulSoup(html, "html.parser")

    for each in soup.find_all(href=re.compile("view")):
        content = ''.join([each.text])
        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([content, soup2.h2.text])
        content = ''.join([content, " -> ", url2])
        print(content)

if __name__ == "__main__":
    main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-7-21 12:55:04 | 显示全部楼层
jxd12345 发表于 2021-7-20 19:41
能不能发一下你的代码

我直接搬答案过来,由于百度网页很多信息已更改,这个直接运行将无响应。



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()
    soup = BeautifulSoup(html, "html.parser")

    for each in soup.find_all(href=re.compile("view")):
        content = ''.join([each.text])
        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([content, soup2.h2.text])
        content = ''.join([content, " -> ", url2])
        print(content)

if __name__ == "__main__":
    main()
QQ截图20210721165349.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-7-21 13:02:04 | 显示全部楼层
jxd12345 发表于 2021-7-20 19:41
能不能发一下你的代码

我直接搬答案过来,由于百度网页很多信息已更改,这个直接运行将无响应。
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()
    soup = BeautifulSoup(html, "html.parser")

    for each in soup.find_all(href=re.compile("view")):
        content = ''.join([each.text])
        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([content, soup2.h2.text])
        content = ''.join([content, " -> ", url2])
        print(content)

if __name__ == "__main__":
    main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-7-24 20:40:18 | 显示全部楼层
童鞋们,由于百度百科原网页的变化,也经过我自己这几天自己的缓慢摸索和不断尝试,终于尝试出了可以运行的代码,我在源代码的基础上更改了下,内容如下:

  1. import urllib.request
  2. import urllib.parse
  3. import re
  4. from bs4 import BeautifulSoup                  

  5. def main():
  6.     keyword = input("请输入关键词:")
  7.     keyword = urllib.parse.urlencode({"word":keyword})
  8.     response = urllib.request.urlopen("https://baike.baidu.com/search/word?%s" % keyword)   #此处将原网址http更新为https
  9.     html = response.read()
  10.     soup = BeautifulSoup(html, "html.parser")
  11.     print(soup.h2.text)                                               # 此处增加了打印标题
  12.     print("\n")                                                       # 隔一行好看些
  13.    
  14.     for each in soup.find_all(property=re.compile("description")):    # 此处增加打印简介
  15.         print(each['content'])
  16.    
  17.     print("\n下边打印相关链接\n")

  18.     for each in soup.find_all(href=re.compile("viewPageContent")):     #此处将原来的“view”更改为“viewPageContent”
  19.         content = ''.join([each.text])
  20.         url2 = ''.join(["https://baike.baidu.com", each["href"]])      #此处将原网址http更新为https
  21.         response2 = urllib.request.urlopen(url2)
  22.         html2 = response2.read()
  23.         soup2 = BeautifulSoup(html2, "html.parser")
  24.         if soup2.h2:
  25.             content = ''.join([content, soup2.h2.text])
  26.         content = ''.join([content, " -> ", url2])
  27.         print(content)

  28. if __name__ == "__main__":
  29.     main()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-7-24 20:43:30 | 显示全部楼层
Twilight6 发表于 2021-7-21 09:41
看下这里吧,大致是这么个意思:

[已解决] 055课 爬百度百科“网络爬虫”的词条 问题

由于百度百科原网页的变化,也经过我自己这几天自己的缓慢摸索和不断尝试,终于尝试出了可以运行的代码,我在源代码的基础上更改了下,内容如下:

  1. import urllib.request
  2. import urllib.parse
  3. import re
  4. from bs4 import BeautifulSoup                  

  5. def main():
  6.     keyword = input("请输入关键词:")
  7.     keyword = urllib.parse.urlencode({"word":keyword})
  8.     response = urllib.request.urlopen("https://baike.baidu.com/search/word?%s" % keyword)   #此处将原网址http更新为https
  9.     html = response.read()
  10.     soup = BeautifulSoup(html, "html.parser")
  11.     print(soup.h2.text)                                               # 此处增加了打印标题
  12.     print("\n")                                                       # 隔一行好看些
  13.    
  14.     for each in soup.find_all(property=re.compile("description")):    # 此处增加打印简介
  15.         print(each['content'])
  16.    
  17.     print("\n下边打印相关链接\n")

  18.     for each in soup.find_all(href=re.compile("viewPageContent")):     #此处将原来的“view”更改为“viewPageContent”
  19.         content = ''.join([each.text])
  20.         url2 = ''.join(["https://baike.baidu.com", each["href"]])      #此处将原网址http更新为https
  21.         response2 = urllib.request.urlopen(url2)
  22.         html2 = response2.read()
  23.         soup2 = BeautifulSoup(html2, "html.parser")
  24.         if soup2.h2:
  25.             content = ''.join([content, soup2.h2.text])
  26.         content = ''.join([content, " -> ", url2])
  27.         print(content)

  28. if __name__ == "__main__":
  29.     main()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-7-27 18:10:51 | 显示全部楼层
童鞋们,由于百度百科原网页的变化,也经过我自己这几天自己的缓慢摸索和不断尝试,终于尝试出了可以运行的代码,我在源代码的基础上更改了下,内容如下:

  1. import urllib.request
  2. import urllib.parse
  3. import re
  4. from bs4 import BeautifulSoup                  

  5. def main():
  6.     keyword = input("请输入关键词:")
  7.     keyword = urllib.parse.urlencode({"word":keyword})
  8.     response = urllib.request.urlopen("https://baike.baidu.com/search/word?%s" % keyword)   #此处将原网址http更新为https
  9.     html = response.read()
  10.     soup = BeautifulSoup(html, "html.parser")
  11.     print(soup.h2.text)                                               # 此处增加了打印标题
  12.     print("\n")                                                       # 隔一行好看些
  13.    
  14.     for each in soup.find_all(property=re.compile("description")):    # 此处增加打印简介
  15.         print(each['content'])
  16.    
  17.     print("\n下边打印相关链接\n")

  18.     for each in soup.find_all(href=re.compile("viewPageContent")):     #此处将原来的“view”更改为“viewPageContent”
  19.         content = ''.join([each.text])
  20.         url2 = ''.join(["https://baike.baidu.com", each["href"]])      #此处将原网址http更新为https
  21.         response2 = urllib.request.urlopen(url2)
  22.         html2 = response2.read()
  23.         soup2 = BeautifulSoup(html2, "html.parser")
  24.         if soup2.h2:
  25.             content = ''.join([content, soup2.h2.text])
  26.         content = ''.join([content, " -> ", url2])
  27.         print(content)

  28. if __name__ == "__main__":
  29.     main()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-8 17:56:16 | 显示全部楼层
chuangyuemx 发表于 2021-7-24 20:40
童鞋们,由于百度百科原网页的变化,也经过我自己这几天自己的缓慢摸索和不断尝试,终于尝试出了可以运行的 ...

打印的标题内容不正确。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 02:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表