鱼C论坛

 找回密码
 立即注册
查看: 894|回复: 3

[已解决]055课后作业 爬取 猪八戒 题目 求助

[复制链接]
发表于 2020-5-21 22:04:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. target_class = soup.find(True,{"class":["polysemantList-wrapper cmn-clearfix","main-content"]})

  2. target_url = target_class.find_all("a",href=True)

复制代码



我在写055 课后作业,其中有个问,如何实现 使用soup.find 在 多个 class 内查找内容?

以上代码我想实现的是  在 class : "polysemantList-wrapper cmn-clearfix"   和  class :"main-content"  中,提取出 href 内容。   以上函数无法实现,只能得出第一个class 的内容。
最佳答案
2020-5-21 22:47:23
要find_all吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-21 22:09:09 | 显示全部楼层
用正则吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-21 22:47:23 | 显示全部楼层    本楼为最佳答案   
要find_all吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-22 23:16:02 | 显示全部楼层
本帖最后由 Cminglyer 于 2020-5-23 12:24 编辑

自己回复自己:

昨天的问题,今天晚上搞明白了,055课后作业,原答案的代码也有些功能无法实现,自己写的如下,有些乱,但基本可以实现功能:


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

  5. keyword = input("请输入关键字:")

  6. keyword_new = urllib.parse.quote(keyword)

  7. url = "https://baike.baidu.com/item/{}".format(keyword_new)

  8. response = urllib.request.urlopen(url)

  9. html = response.read().decode("utf-8")

  10. soup = BeautifulSoup(html,"html.parser")

  11. content1 = soup.find("dd",class_ = "lemmaWgt-lemmaTitle-title")

  12. title1 = content1.find("h1").string
  13. title2 = content1.find("h2").string

  14. content2 = soup.find("div",class_ = "lemma-summary").text

  15. print(title1,title2)
  16. print("\n",content2)


  17. print("下面打印相关链接:")

  18. target_class = soup.find_all(True,{"class":["polysemantList-wrapper cmn-clearfix","main-content"]})   # 处理两个class类,输出的target_class 是含2个大列表的列表
  19. target_url_temp =[]
  20. target_url =[]

  21. for each_class in target_class:   # 对target_class 含的2个大列表进行分别处理
  22.     target_url_temp.append(each_class.find_all("a",href=True))    # target_url_temp 是含2个大列表的列表

  23. for each in target_url_temp[0]:
  24.     target_url.append(each)      # 对于target_url_temp 内的每个大列表中的元素,提取出来,导入进target_url

  25. for each in target_url_temp[1]:
  26.     target_url.append(each)

  27. # 以上操作后,target_url 就成为了一个列表,里面每个元素都是上面提到的两个class 大类里的 许多<a>标签。

  28. count = 0

  29. list1 = []

  30. for each in target_url:
  31.     try:
  32.         response2 = urllib.request.urlopen("".join(["https://baike.baidu.com",each["href"]]))
  33.         html2 = response2.read().decode("utf-8")
  34.         soup2 = BeautifulSoup(html2,"html.parser")
  35.         content2 = soup2.find("dd",class_ = "lemmaWgt-lemmaTitle-title")
  36.         title_a = content2.find("h1").string
  37.     except:
  38.         continue

  39.     else:
  40.         try:
  41.             title_b = content2.find("h2").string

  42.         except:
  43.             print(title_a,"->","".join(["https://baike.baidu.com",each["href"]]))
  44.             continue
  45.         
  46.         else:
  47.             if title_b not in list1:
  48.                
  49.                 print(title_a,title_b,"->","".join(["https://baike.baidu.com",each["href"]]))
  50.                
  51.                 list1.append(title_b)
  52.                
  53.                 count = count+1
  54.                
  55.                 if count>10 :
  56.                     order = input("请输入任何字符继续,输入“q”退出:")
  57.                     if order != "q":
  58.                         count = 0
  59.                         continue
  60.                     else:
  61.                         count = 0
  62.                         break
  63.                 else:
  64.                     continue

复制代码



批注 2020-05-22 231013.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-20 02:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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