Python爬虫中的数据采集和分析 - Go语言中文社区

Python爬虫中的数据采集和分析


数据采集和解析
通过《网络爬虫和相关工具》一文,我们已经了解到了开发一个爬虫需要做的工作以及一些常见的问题,至此我们可以对爬虫开发需要做的工作以及相关的技术做一个简单的汇总,这其中可能会有一些我们之前没有使用过的第三方库,不过别担心,这些内容我们稍后都会一一讲到。

  • 下载数据 - urllib / requests / aiohttp。
  • 解析数据 - re / lxml / beautifulsoup4(bs4)/ pyquery。
  • 缓存和持久化 - pymysql / sqlalchemy / peewee/ * redis / pymongo。
  • 生成数字签名 - hashlib。
  • 序列化和压缩 - pickle / json / zlib。
  • 调度器 - 进程(multiprocessing) / 线程(threading) / 协程(coroutine)。

HTML页面分析

如果你依然在编程的世界里迷茫,
不知道自己的未来规划,
对python感兴趣,
这里推荐一下我的学习交流圈:832 139 748,
里面都是学习python的,
从最基础的python【python,游戏,黑客技术,网络安全,数据挖掘,爬虫】
到网络安全的项目实战的学习资料都有整理,
送给每一位python小伙伴,
希望能帮助你更了解python,学习python

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>首页</title>
    </head>
    <body>
        <h1>Hello, world!</h1>
        <p>这是一个神奇的网站!</p>
        <hr>
        <div>
            <h2>这是一个例子程序</h2>
            <p>静夜思</p>
            <p class="foo">床前明月光</p>
            <p id="bar">疑似地上霜</p>
            <p class="foo">举头望明月</p>
            <div><a href="http://www.baidu.com"><p>低头思故乡</p></a></div>
        </div>
        <a class="foo" href="http://www.qq.com">腾讯网</a>
        <img src="./img/pretty-girl.png" alt="美女">
        <img src="./img/hellokitty.png" alt="凯蒂猫">
        <img src="/static/img/pretty-girl.png" alt="美女">
        <table>
            <tr>
                <th>姓名</th>
                <th>上场时间</th>
                <th>得分</th>
                <th>篮板</th>
                <th>助攻</th>
            </tr>
        </table>
    </body>
</html>

如果你对上面的代码并不感到陌生,那么你一定知道HTML页面通常由三部分构成,分别是用来承载内容的Tag(标签)、负责渲染页面的CSS(层叠样式表)以及控制交互式行为的JavaScript。通常,我们可以在浏览器的右键菜单中通过“查看网页源代码”的方式获取网页的代码并了解页面的结构;当然,我们也可以通过浏览器提供的开发人员工具来了解网页更多的信息。

使用requests获取页面

1.GET请求和POST请求。


2.URL参数和请求头。


3.复杂的POST请求(文件上传)。


4.操作Cookie。


5.设置代理服务器。


说明:关于requests的详细用法可以参考它的官方文档。

四种采集方式

四种采集方式的比较

在这里插入图片描述

说明:BeautifulSoup可选的解析器包括:Python标准库(html.parser)、lxml的HTML解析器、lxml的XML解析器和html5lib。

使用正则表达式

如果你对正则表达式没有任何的概念,那么推荐先阅读《正则表达式30分钟入门教程》,然后再阅读我们之前讲解在Python中如何使用正则表达式一文。

使用XPath和Lxml

BeautifulSoup的使用

BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库。它能够通过你喜欢的转换器实现惯用的文档导航、查找、修改文档的方式。

遍历文档树
1.获取标签
2.获取标签属性
3.获取标签内容
4.获取子(孙)节点
5.获取父节点/祖先节点
6.获取兄弟节点
搜索树节点
1.find / find_all
2.select_one / select

说明:更多内容可以参考BeautifulSoup的官方文档。

PyQuery的使用

pyquery相当于jQuery的Python实现,可以用于解析HTML网页。

实例 - 获取知乎发现上的问题链接

from urllib.parse import urljoin

import re
import requests

from bs4 import BeautifulSoup


def main():
    headers = {'user-agent': 'Baiduspider'}
    proxies = {
        'http': 'http://122.114.31.177:808'
    }
    base_url = 'https://www.zhihu.com/'
    seed_url = urljoin(base_url, 'explore')
    resp = requests.get(seed_url,
                        headers=headers,
                        proxies=proxies)
    soup = BeautifulSoup(resp.text, 'lxml')
    href_regex = re.compile(r'^/question')
    link_set = set()
    for a_tag in soup.find_all('a', {'href': href_regex}):
        if 'href' in a_tag.attrs:
            href = a_tag.attrs['href']
            full_url = urljoin(base_url, href)
            link_set.add(full_url)
    print('Total %d question pages found.' % len(link_set))


if __name__ == '__main__':
    main()
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/XIAOYUE3035/article/details/99846562
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢