美文网首页视觉艺术python
python爬虫(一):requests及bs4 两个pytho

python爬虫(一):requests及bs4 两个pytho

作者: 烂笔头2020 | 来源:发表于2020-04-16 15:52 被阅读0次

    之前一直想开始学习python网络爬虫的方法,今天决定就开始着手开始学习一下,先从基本的一些开始学习。
    参考地址:https://mp.weixin.qq.com/s/ApnEy6NWS2f-DqIIrhHzGw
    爬虫程序一般是通过模拟浏览器对相应URL发出请求,获取数据,并通过正则等手段匹配出页面中我们所需的数据。Requests 是学习爬虫的一大利器。是一个优雅简单的 HTTP库。
    requests.get()用于请求目标网站,类型是一个HTTPresponse类型

    import requests
    
    response = requests.get('http://www.baidu.com')
    print(response.status_code)  # 打印状态码,状态码为200表示请求成功
    print(response.url)          # 打印请求url
    print(response.headers)      # 打印头信息
    print(response.cookies)      # 打印cookie信息
    print(response.text)  #以文本形式打印网页源码
    print(response.content) #以字节流形式打印
    

    1、基本的get请求

    import requests
    
    response = requests.get('http://httpbin.org/get')
    print(response.text)
    

    结果:


    2、解析json
    response=requests.get('http://httpbin.org/get')
    print(response.text)
    print(response.json())
    print(type(response.json()))
    

    结果:


    拿到网页信息后,我们要解析页面,通常来说我们有以下几种方式来解析页面,获取我们所需的信息。

    1. 正则表达式
    2. Lxml
    3. Beautiful Soup
      Beautiful Soup是一个python的实现解析库,语法会比前面两种方法简单,不过运行速度会比前面两种慢很多,特别是数据量非常大的时候,不过由于是新入手的小白,就先学习Beautiful Soup,学习一下匹配页面所需元素的方法。

    下面是bs4的一些基础知识:
    将一段文档传入BeautifulSoup的构造方法,就能得到一个文档的对象。

    bs = BeautifulSoup(open('index.html',encoding='utf-8'),'lxml')
    print(bs)
    #我这里用这个打开报错: 'utf-8' codec can't decode byte 0xa1 in position 63: invalid start byte
    #把encoding='utf-8'去掉就可以了
    

    注意:这样上传文档的话,BeautifulSoup里面需要两个参数。一个为open方法,一个是固定写法,也就是解析器,open方法里面也同样需要两个参数,一个是想要解析的数据,另一个为设置编码的格式。

    (1)获取网页中的title标签
    print(bs.title)
    (2)获取head标签及标签内部的所有其他标签
    print(bs.head)
    (3)获取当中的第一个a标签
    print(bs.a)
    注意:获取文档当中所有的xx当中第一个xx或者第一个xx里面的内容。都可以用bs.xx来获取
    (4)获取指定标签的所有属性
    print(bs.a.attrs)
    (5)获取标签的属性
    print(bs.a['href'])
    (6)获取标签的文本内容。
    print(bs.a.string)
    注意:string获取的文本指的是本标签的文本,不包含子标签的文本
    (7)contents能够获取指定标签下面的所有内容。
    print(bs.body.contents)
    (8)获取所有内容当中指定索引的内容
    print(bs.div.contents[3])
    (9)通过id和类名来找标签
    print(bs.find(id='kw')) print(bs.find(class_='shopping'))
    注意:id是唯一的,通过id来找,只能找到一个,所以用find,而class不是唯一的,通过class来找,就有可能找到多个。
    (10)select选择指定的标签
    print(bs.select('title')) print(bs.select('a'))
    在bs4中,小数点“.”表示类名,#表示id
    print(bs.select('.first')) print(bs.select('#kw')) print(bs.select('div.now'))

    下面是一个加载本地html的例子:
    html文档

    <!doctype>
    <!DOCTYPE html>
    
    <html>
    <head>
        <meta  charset="utf-8"> 
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>Page Title</title>
    </head>
    <body>
        <h1>这是我的第一个标题</h1>
        <p>我的第一个段落</p>
        <div class='main-page'>
            <ul class='menu-list'>
                <li>首页</li>
                <li>新闻</li>
                <li>影视</li>
            </ul>
        </div>
    </body>
    </html>
    

    通过 Beautiful Soup 来加载这个html

    from bs4 import BeautifulSoup
    bs = BeautifulSoup(open('F:/crawler/example.html','r'), 'lxml')
    #print(bs)
    #find()查找第一个匹配结果出现的地方,find_all()找到所有匹配结果出现的地方
    # print(bs.find('div'))   # 找到 div 标签
    li=bs.find_all('li')   # 找到所有 li 标签
    for i in li:
        print(i)
    

    下面是结合起来的一个简单例子:

    import requests
    from bs4 import BeautifulSoup
    
    url = 'http://fund.eastmoney.com/340007.html?spm=search'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
    r = requests.get(url,headers=headers)
    html=r.text
    soup = BeautifulSoup(html, 'html.parser')
    

    上面是两个库的一点基本的基础知识,要学习的还有很多,后续会继续学习补充。

    相关文章

      网友评论

        本文标题:python爬虫(一):requests及bs4 两个pytho

        本文链接:https://www.haomeiwen.com/subject/gjxrvhtx.html