Python3之网络爬虫<0>初级

时间:2022-10-21 20:30:47

一 知识域/学习路径

1.1 初级阶段

  java: net(网络编程)、IO、多线程(含:线程池)、正则表达式、集合、JDBC/数据库等

  python: urllib.request

  NodeJs/JavaScript: http

1.2 中级阶段

  java: Jsoup(优势:HTML DOM解析)、HttpClient(优势:下载/IP代理等)、OKHttp、HTML Parser(优势:解析)、JavaScript/HTML(函数、JSON、Ajax、JacaScript DOM)等

  NodeJs/JavaScript: express

1.3 进阶

  java: web自动化测试框架selenium【WebDriver/ChromeDriver】(优势:下载/解析)

  python: scrapy、web自动化测试框架selenium(WebDriver/ChromeDriver)

  NodeJs/JavaScript: web自动化测试框架(PhantomJS/ selenium)

1.4 高级阶段

  java: Heritrix网络爬虫框架

一个由 java 开发的、开源的网络爬虫,用户可以使用它来从网上抓取想要的资源。其最出色之处在于它良好的可扩展性,方便用户实现自己的抓取逻辑。

1.5 涉及经验

  计算机网络(网络编程/ HTTP&TCP协议)

    HTTP报文

      报文头:

        请求方法: GET/POST .etc

        遵循协议: HTTP / HTTPS .etc

      请求体

    网络抓包与调试: Chrome开发者工具、Fiddle、Postman等

    IP代理

  文件操作  

  数据库 / JDBC  

  数据结构(栈/队列/List/Set/Map/深度优先/广度优先等)

  Cookie/Session

  反爬虫机制、模拟登陆

  多线程编程

    线程池/多线程爬行

  分布式爬虫

  可能涉及技巧:JS注入、模拟鼠标滑动、验证码识别(英文字母/数字/汉字/物品识别等)、延时请求(降低请求频率)等

  可能涉及语言:Python、Java、JavaScript、HTML、CSS等

  网页正文提取方法:Jsoup(基于 HTMLO DOM解析树)等、Html2Article(基于行块分布函数的通用正文抽取算法)

二 入门级演示

2.1 Python简易Demo

由于Python3合并URLib与URLlib2统一为URLlib,Python3将urlopen方法放在了urllib.request对象下。

官方文档:https://docs.python.org/3/library/urllib.request.html#module-urllib.request

在实现爬取网页过程中,屡次执行以下脚本:

#coding:UTF-8
import random;
import urllib.request;# 不推荐使用 import urllib
rawdata =
urllib.request.urlopen('http://www.111cn.net/phper/python/68713.htm').read(); file = open("testfile","w+");
file.write(str(rawdata));

三 参考文档

  [1] Python3中urllib详细使用方法(header,代理,超时,认证,异常处理)

  [2] 基于行块分布函数的通用正文抽取算法.陈鑫.哈尔滨工业大学社会计算与信息检索研究中心

  [3] 网页正文提取——Html2Article

Python3之网络爬虫<0>初级的更多相关文章

  1. python3编写网络爬虫20-pyspider框架的使用

    二.pyspider框架的使用 简介 pyspider是由国人binux 编写的强大的网络爬虫系统 github地址 : https://github.com/binux/pyspider 官方文档 ...

  2. python3编写网络爬虫18-代理池的维护

    一.代理池的维护 上面我们利用代理可以解决目标网站封IP的问题 在网上有大量公开的免费代理 或者我们也可以购买付费的代理IP但是无论是免费的还是付费的,都不能保证都是可用的 因为可能此IP被其他人使用 ...

  3. Python3编写网络爬虫11-数据存储方式四-关系型数据库存储

    关系型数据库存储 关系型数据库是基于关系模型的数据库,而关系模型是通过二维表保存的,所以它的存储方式就是行列组成的表.每一列是一个字段,每一行是一条记录.表可以看作某个实体的集合,而实体之间存在联系, ...

  4. 【C&plus;&plus;&amp&semi;爬虫】C&plus;&plus;实现网络爬虫&amp&semi;socket初级教程

    2019年了,发现以前的很多教程都不能用了. 我自己写的socket发给服务器总是返回301错误——资源永久转移.很多教程都是这样,困扰了我很久. 终于我发现了一篇能用的爬虫代码,参考MSDN以及众多 ...

  5. python3编写网络爬虫23-分布式爬虫

    一.分布式爬虫 前面我们了解Scrapy爬虫框架的基本用法 这些框架都是在同一台主机运行的 爬取效率有限 如果多台主机协同爬取 爬取效率必然成倍增长这就是分布式爬虫的优势 1. 分布式爬虫基本原理 1 ...

  6. python3编写网络爬虫22-爬取知乎用户信息

    思路 选定起始人 选一个关注数或者粉丝数多的大V作为爬虫起始点 获取粉丝和关注列表 通过知乎接口获得该大V的粉丝列表和关注列表 获取列表用户信息 获取列表每个用户的详细信息 获取每个用户的粉丝和关注 ...

  7. python3编写网络爬虫21-scrapy框架的使用

    一.scrapy框架的使用 前面我们讲了pyspider 它可以快速的完成爬虫的编写 不过pyspider也有一些缺点 例如可配置化不高 异常处理能力有限对于一些反爬虫程度非常强的网站 爬取显得力不从 ...

  8. python3编写网络爬虫19-app爬取

    一.app爬取 前面都是介绍爬取Web网页的内容,随着移动互联网的发展,越来越多的企业并没有提供Web页面端的服务,而是直接开发了App,更多信息都是通过App展示的 App爬取相比Web端更加容易 ...

  9. python3编写网络爬虫15-Splash的使用

    Splash是一个JavaScript渲染服务 是一个带有HTTP API的轻量级浏览器 同时对接了python的Twisted 和QT库 利用它可以实现对动态渲染页面的抓取 功能介绍 1.异步方式处 ...

随机推荐

  1. &lbrack;解决WebClient或HttpWebRequest首次连接缓慢问题&rsqb;

    [编程环境]Visual Studio 2010, NET4.0 [开发语言]C#, 理论上VB.NET等依赖.NET Framework框架的语言均受此影响 [问题描述] 使用HttpWebRequ ...

  2. 【高清未加密】2015传智播客 最新21期c&num;asp&period;net 基础到就业班视频和源码

    [.NET]传智播客第[21]期就业班视频(高清无加密)本套2015年21期传智播客C#ASP.NET win10通用mvc+app开发视频教程附源码,是一套非常不错的asp.net自学视频教程,传智 ...

  3. C&num;基础精华03(常用类库StringBuilder,List&lt&semi;T&gt&semi;泛型集合,Dictionary&lt&semi;K &comma; V&gt&semi; 键值对集合,装箱拆箱)

    常用类库StringBuilder StringBuilder高效的字符串操作 当大量进行字符串操作的时候,比如,很多次的字符串的拼接操作. String 对象是不可变的. 每次使用 System. ...

  4. PHP两个日期之间的所有日期

    我想得到两个日期之间的所有日期, 例如:输入两个日期,把这两个日期之间的所有日期取出来     如果是:2005-02-01至2005-02-05(同为一个月)     则为:2005-02-01,2 ...

  5. CSAPP:第十二章 并发编程

    CSAPP:第十二章 并发编程 12.1 线程执行模型12.2 多线程之间并发通信12.3 其他并发问题   使用应用级并发的应用程序称为并发程序.现代操作系统提供三种基本的构造并发程序的方法: 进程 ...

  6. php 日期时间类型带毫秒

    <?php date_default_timezone_set('PRC'); $mtimestamp = sprintf("%.3f", microtime(true)); ...

  7. POJ 2408 - Anagram Groups - &lbrack;字典树&rsqb;

    题目链接:http://poj.org/problem?id=2408 World-renowned Prof. A. N. Agram's current research deals with l ...

  8. C&plus;&plus; auto 关键字的使用

    C++98 auto 早在C++98标准中就存在了auto关键字,那时的auto用于声明变量为自动变量,自动变量意为拥有自动的生命期,这是多余的,因为就算不使用auto声明,变量依旧拥有自动的生命期: ...

  9. jquery load &lpar;&dollar;&period;load&rpar; 事件用法与分析&lpar;转&rpar;

    首先我们需要清楚的是jquery load方法是对jQuery.ajax()进行封装以方便我们使用的一个方法,当我们需要处理较为复杂的逻辑时候,还是需要用到jQuery.ajax()这个比较全面的方法 ...

  10. 解决应用程序无法正常启动0xcxxxxxxxxxx问题

    简述:使用VS2008写了一个MFC程序,结果传到别人的机子上(WIN7)出现应用程序正常初始化(0xc0150002)失败的问题.为什么我的机子上可以,而别人的机子上运行不了呢?下面是我找到的一个解 ...