鱼C论坛

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

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

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

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

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

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

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吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-21 22:09:09 | 显示全部楼层
用正则吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-21 22:47:23 | 显示全部楼层    本楼为最佳答案   
要find_all吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

自己回复自己:

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

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

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

keyword_new = urllib.parse.quote(keyword)

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

response = urllib.request.urlopen(url)

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

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

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

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

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

print(title1,title2)
print("\n",content2)


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

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

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

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

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

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

count = 0

list1 = []

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

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

        except:
            print(title_a,"->","".join(["https://baike.baidu.com",each["href"]]))
            continue
        
        else:
            if title_b not in list1:
                
                print(title_a,title_b,"->","".join(["https://baike.baidu.com",each["href"]]))
                
                list1.append(title_b)
                
                count = count+1
                
                if count>10 :
                    order = input("请输入任何字符继续,输入“q”退出:")
                    if order != "q":
                        count = 0
                        continue
                    else:
                        count = 0
                        break
                else:
                    continue


批注 2020-05-22 231013.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-21 05:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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