鱼C论坛

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

[已解决]55讲作业题

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

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

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

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

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

  13. if __name__ == "__main__":
  14.     main()

复制代码
  1. for each in soup.find_all(href=re.compile("view")):
  2.         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()函数
  1. import urllib.request
  2. import re
  3. from bs4 import BeautifulSoup

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

  14. if __name__ == "__main__":
  15.     main()

复制代码
小甲鱼最新课程 -> https://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()函数
  1. import urllib.request
  2. import re
  3. from bs4 import BeautifulSoup

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

  14. if __name__ == "__main__":
  15.     main()

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

大佬 牛
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

回帖奖励 +2 鱼币

萌新表示不会
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-18 16:57:46 | 显示全部楼层
大牛人!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-30 03:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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