前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >盘点一个Python网络爬虫问题

盘点一个Python网络爬虫问题

作者头像
前端皮皮
发布2023-10-17 14:18:26
1430
发布2023-10-17 14:18:26
举报

一、前言

前几天在Python钻石交流群【空】问了一个Python网络爬虫处理的问题,一起来看看吧。他的代码如下:

代码语言:javascript
复制
from bs4 import BeautifulSoup
doc='''
<html>
 <head>
  <title>
   The Dormouse's story
  </title>
 </head>
 <body>
  <p class="title">The Dormouse's story<b></b></p >
  <p class="story">
    Once upon a time there were three little sisters;and their names were
  Elsie,
   and
  ;
  and they lived at bottom of a well.
  </p >
  <p class="story">...</p >
 </body>
</html>
'''

def myFilter(tag):
  print(tag.name)
  return (tag.name=="a "  and   tag.hasattr("href")   and   tag["href"]=="http://example.com/lacie")


soup=BeautifulSoup(doc,"lxml")
tag=soup.find_all(myFilter)
print(tag)

但是不知道他的问题是什么,他自己也没说清楚,就只能盲猜,怪难受的。

二、实现过程

这里【甯同学】、【瑜亮老师】、【NUS吴庆农⁶⁴²-预见更好的自己】给了一个思路,如下所示:

后来发现是函数的问题:

后来【提请问粘给图截报错贴代源码】指出代码还是存在问题的,如下所示:

对症修改之后,就可以解决问题了:

论细节的重要性:

顺利地解决了粉丝的问题。

最后【NUS吴庆农⁶⁴²-预见更好的自己】给大家补充了些知识,这里与大家共勉。

1、tag.get('href')和tag['href']效果是一样的,区别是,当遇到href为空时,tag.get('href')会返回空值,不会报错退出,而tag['href']会报错退出。

2、tag['href']是提取href属性的值,包含的逻辑是①如果href有值我就提取,②如果没有值或不存在我就报错退出,所以tag['href']逻辑上已经包含了对tag有没有存在href属性的判断了,就没有必要再单独写tag.hasattr('href')了,都已经判断过了,何必再多次一举呢?这是你代码的逻辑问题。

3、BS4里有没有.hasattr()这个方法?还属于需要看说明文档确认的,我暂时手头没有电脑,不方便验证。如果没有,自己不能随便从别的地方套用过来。或许在BS4里写法是.has_attr()。所以如果方法写错了,肯定也是报错。

主要还是你代码的逻辑问题,你没仔细看两位大佬给你的他们的写法吗?不是他们非得把你写的函数去掉,是真的没必要写个函数只处理这么个小功能,而且你的函数里return的逻辑还有问题,他们的return为什么不写tag.hasattr('href')?因为tag['href']='xxxxxx'已经包含了,而且更推荐用tag.get('href')=='http://xxxx'的写法。

三、总结

大家好,我是皮皮。这篇文章主要盘点了一个Python网络爬虫的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python共享之家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、实现过程
  • 三、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档