python爬虫学习笔记(一)-- Python函数五种参数类型+soup.find()函数使用

 上篇中我们已经可以简单的下载网页中的图片到本地了,这里做一个补充:

soup.find和soup.find_all中的参数是一样的。不相信可以在pycharm中,按住ctrl单击我们的soup.find函数,然后我们会看到这样一个定义:

    def find(self, name=None, attrs={}, recursive=True, text=None,
             **kwargs):
        """Return only the first child of this Tag matching the given
        criteria."""
        r = None
        l = self.find_all(name, attrs, recursive, text, 1, **kwargs)
        if l:
            r = l[0]
        return r

其实内部调用的就是find_all,然后取的是第一个元素。

另对于<div class='content'></div>此类型的标签元素,我们不能使用soup.find('div', class='content'),因为class是定义一个类的关键字,而此关键字是不能作为参数的。

如:中国研招网

我们需要在页面中找到对应的<ul class='news-list'></ul>

import requests
from bs4 import BeautifulSoup

response = requests.get(url = "https://yz.chsi.com.cn/kyzx/tjxx/")
page = response.text

soup = BeautifulSoup(page, 'html.parser')
ul = soup.find('ul','news-list')
print(ul)

运行截图:

 注释:Python函数参数的五种类型

ul = soup.find('ul','news-list')的等价写法:
ul = soup.find(name='ul', attrs={"class":'news-list'})

Python的参数类型一共有5种:POSITIONAL_OR_KEYWORD、VAR_POSITIONAL(位置参数)、VAR_KEYWORD(关键字参数)、KEYWORD_ONLY、POSITIONAL_ONLY

其中 POSITIONAL_OR_KEYWORD、VAR_POSITIONAL、VAR_KEYWORD、KEYWORD_ONLY 比较常用

1、可变长位置参数,接收一个元组:参数类型为VAR_POSITIONAL时,即*args参数,只能通过位置传值,如

#位置参数
def aaa(*args):
    print("参数是:{0}".format(args))

aaa("weizu", "tiantian")
aaa(args="wang")#这种写法就是错误的

因为只是代表位置而不是说这个位置有为args的名字,运行截图:

def aaa(*args, name):
    print("参数是:{0}".format(args))
aaa("weizu", "tiantian")#这种写法也是错误的

错误的原因其实类似,因为aaa方法,首个是位置参数,而代表了一个位置,所以在调用的时候,默认所有的不带指定(即关键字)的传参方式都是在这个位置之内,所以也是错误的,运行截图:

正确的调用方式是:

aaa("weizu", name = "tiantian")

2、可变长关键字参数,接收一个字典:参数类型为VAR_KEYWORD,即 **kwargs参数,只能通过关键字传值,如

def aaa(**kwargs):
    print("参数是:{0}".format(kwargs))
aaa("weizu")#错误的写法

运行截图:

正确的书写方式是:字典,使用的时候传入键值对

def aaa(**kwargs):
    print("参数是:{0}".format(kwargs))
aaa(name = "weizu", wo = 'wang')

截图:

不难发现关键字参数无论是几个参数,传入的形式是以字典的方式传入。而且,关键字参数要放在最后面。

3、位置或关键字参数,参数的类型为POSITIONAL_OR_KEYWORD时,说明此参数前面没有VAR_POSITIONAL类型的参数,可以通过位置或关键字传值,如

def aaa(name):
    print("参数是:{0}".format(name))
aaa(name = "weizu")
#或者
aaa("hello")

截图:

这种参数也是最常用的参数。

4、关键字参数,参数类型为KEYWORD_ONLY时,说明此参数前面存在VAR_POSITIONAL类型的参数,只能通过关键字传值,如

其实前面介绍过:

def aaa(*args, name):
    print("参数是:{0}".format(name))
aaa("haohao",name = "weizu")  #这里只能使用关键字name

5、默认参数

def aaa(*args, name='weizu'):
    print("参数是:{0}".format(name))
aaa("haohao")

也即是使用name='value',定义个一初始值,在不传入的时候,值就是默认的设置。

使用:

def fun(a, b, c=0, *args, **kw):
    print(a, b, c, args, kw)

fun("12", "wizu", 3, "alfjalfj","weizu")
fun("12", "wizu", 3, "alfjalfj","weizu", bb = 'test')

运行截图:

因为我们不指定bb='test'的键值对形式,那么编译器会默认解析成前面变长位置参数,即一个元组。

使用的时候,也通常遵循:位置或关键字参数、默认参数、可变长位置参数、可变长关键字参数的顺序使用。

当然了看编译的结果自己也就可以改改就出来了。

 

作者:无涯明月

  • 9
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦否

文章对你有用?不妨打赏一毛两毛

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值