鱼C论坛

 找回密码
 立即注册
查看: 2685|回复: 4

[已解决]55讲作业题

[复制链接]
发表于 2020-12-15 15:34:16 | 显示全部楼层 |阅读模式

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

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

x
0. 编写一个爬虫,爬百度百科“网络爬虫”的词条(链接 -> http://baike.baidu.com/view/284853.htm),将所有包含“view”的链接按下边格式打印出来。
155015bkwikm9tphedz4ev.png
import urllib.request
import re
from bs4 import BeautifulSoup

def main():
    url = "http://baike.baidu.com/view/284853.htm"
    response = urllib.request.urlopen(url)
    html = response.read()
    soup = BeautifulSoup(html, "html.parser") # 使用 Python 默认的解析器
    
    for each in soup.find_all(href=re.compile("view")):
        print(each.text, "->", ''.join(["http://baike.baidu.com", each["href"]]))
        # 上边用 join() 不用 + 直接拼接,是因为 join() 被证明执行效率要高很多

if __name__ == "__main__":
    main()
 for each in soup.find_all(href=re.compile("view")):
        print(each.text, "->", ''.join(["http://baike.baidu.com", each["href"]]))
我想请教一下关于find_all里面href的作用是什么呀
谢谢大佬们了
最佳答案
2020-12-15 21:49:31
<a class="lock-lemma" nslog-type="10003105" target="_blank" href="/view/10812319.htm" title="锁定"><em class="cmn-icon wiki-lemma-icons wiki-lemma-icons_lock-lemma"></em>锁定</a>

首先,看网页源代码有这么一行
然后soup.find_all()函数:返回所有匹配到的结果
参数是href=re.compile()
re.compile()函数:用于编译正则表达式,生成一个 Pattern 对象
所以soup.find_all(href=re.compile("view"))表示查找每一个href="/view/10812319.htm"的结果,用来获得正确的链接地址
看不懂的话可以加print()函数
import urllib.request
import re
from bs4 import BeautifulSoup

def main():
    url = "http://baike.baidu.com/view/284853.htm"
    response = urllib.request.urlopen(url)
    html = response.read()
    soup = BeautifulSoup(html, "html.parser") # 使用 Python 默认的解析器
    
    for each in soup.find_all(href=re.compile("view")):
        print(each)
        print(each.text, "->", ''.join(["http://baike.baidu.com", each["href"]]))
        # 上边用 join() 不用 + 直接拼接,是因为 join() 被证明执行效率要高很多

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

使用道具 举报

发表于 2020-12-15 21:49:31 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +2 鱼币

<a class="lock-lemma" nslog-type="10003105" target="_blank" href="/view/10812319.htm" title="锁定"><em class="cmn-icon wiki-lemma-icons wiki-lemma-icons_lock-lemma"></em>锁定</a>

首先,看网页源代码有这么一行
然后soup.find_all()函数:返回所有匹配到的结果
参数是href=re.compile()
re.compile()函数:用于编译正则表达式,生成一个 Pattern 对象
所以soup.find_all(href=re.compile("view"))表示查找每一个href="/view/10812319.htm"的结果,用来获得正确的链接地址
看不懂的话可以加print()函数
import urllib.request
import re
from bs4 import BeautifulSoup

def main():
    url = "http://baike.baidu.com/view/284853.htm"
    response = urllib.request.urlopen(url)
    html = response.read()
    soup = BeautifulSoup(html, "html.parser") # 使用 Python 默认的解析器
    
    for each in soup.find_all(href=re.compile("view")):
        print(each)
        print(each.text, "->", ''.join(["http://baike.baidu.com", each["href"]]))
        # 上边用 join() 不用 + 直接拼接,是因为 join() 被证明执行效率要高很多

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

使用道具 举报

 楼主| 发表于 2020-12-16 09:22:09 | 显示全部楼层
笨鸟学飞 发表于 2020-12-15 21:49
锁定

首先,看网页源代码有这么一行

大佬 牛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-16 09:41:07 | 显示全部楼层

回帖奖励 +2 鱼币

萌新表示不会
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-18 16:57:46 | 显示全部楼层
大牛人!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-17 00:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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