Python_爬虫_笔记

1.前言

1.1爬虫用途:

网站采集、接口采集(地图(jis 热力学 屋里端口/协议)、微信、知乎、)

1.2基本流程:网页下载(requests)+网页解析+爬虫调度

网页解析:在当前网站找信息、下一个入口等信息
调度:调度器/队列(先进先出、谁快谁先...)

1.3Python爬虫库 urllib、bs4/beautiful_soup、lxml/XPath、scripy

学习顺序:urllib→bs4/beautiful_soup→lxml/XPath→scripy
注:lxml/XPath 是指lxml下的Xpth库;具体用法会在下面部分详述

1.4反爬虫 和 反反爬虫 原理

反爬虫原理:检查request的(user-agent[识别爬虫]、Host、refer[来源,防盗链])、js异步加载、其他机制
反反爬虫:控制爬取节奏(time.sleep())、伪装头信息(user-agent、Host、refer)、伪装IP(代理池)、伪装cookie

1.5用到的知识点:

  • web前端(css选择器、JS渲染规则)选择器;ajax异步加载、HTTP协议、Python进程线程等

-JSON的序列化dumps()和反序列化loads()

对付(HTTPs的)ssl安全套接层协议

HTTPs 有验证,处理办法:
1.引入ssl躲避 2.设置取消验证

2.IP代理、代理池维护【待完善】

url自带

1.调用urllib.request.ProxyHandler(proxies=None)   代理矩柄
2.创建Opener(类似urlopen)
3.安装Opener

代理IP

透明Ip 附加真实IP(用途少),有的直接就是不生效
高密IP 隐藏自身IP
  • cookie-urllib的cookie很复杂,到scrapy上再看

3.网页请求 与 网页解析

3.1 request请求

注:Python最最常用的请求库 - request,其他的可以忽略
#request请求案例(简版):
import request
req = request.urlopen("url地址").read().decode('编码格式')
#request请求案例(标准版)-注:标准请求要加入表头信息
qingqiutou = request.Request(url=url,headers=headers,method="GET")
res=request.urlopen(qingqiutou).read().decode('utf-8')

3.2页面解析库【重要!!!】

3.2.1 re模块,Python自带的正则解析库;最基础最不好用的解析库

注:最原始的办法是re模块正则解析,目前只用正则来处理不遵守结构化DOM(Document Object Model)树规范的页面

用法案例:略

3.2.2 Urllib模块

常见问题:
urllib.request 请求模块,打开和读取URLs
urllib.error 异常处理模块 分为:HTTPerror、urlerror
注:HTTPError在URLError之前,因为HTTPError是URLError的子类,若URLError在前报错会覆盖HTTPError
urllib.parse url解析模块
urllib.robotparser robots.txt 解析模块【少,基本不用】 print(response.getcode()) #打印出状态码
f.getcode() 等同于 f.status 获取状态码
f.getheaders() 等同于 f.info() 获取表头 用法案例:略

3.2.3 bs4解析库【form bs4 import beautiful soup】

主要用于网页数据解析,根据标签机结构化解析
find_all find
节点选取: 子节点、父节点、兄弟节点 bs4库能格式化html数据
包含4大(bs4)对象
1.Tag 标签 例如:supe.title 能表示标题,默认第一个【包含NavigableString、Comment】
2.NavigableString 例如:print(soup.p.string) 输出p标签里的内容【包含Comment】
3.BeautifulSoup 是一个特殊的tag对象 能提取name、attr等属性
4.Comment 能提取注释内容

bs4库的4个解析器

  • 1、 Python标准库【主要,系统自带;】

    使用方法: BeautifulSoup(markup,"html.parser")【注:markup是html文档】

    Python的内置标准库

案例
from bs4 import BeautifulSoup
soup = BeautifulSoup.(html,'html.parser')
print(soup.title.string)
  • 2、 lxmlHTML解析器

    BeautifulSoup(markup,"lxml")

    速度快、需要安装C语言库

  • 3、 lxml XML解析器

    使用方法:BeautifulSoup(markup,"xml")

    速度快,唯一支持XML的解析器、需要安装C语言库

  • 4、 html5lib

    BeautifulSoup(markup,"html5lib")

    容错性好,以浏览器的形式解析文档,生成html5格式的文档,但是速度慢

3.2.4 lxml.XPath解析库 可以代替re的lxml解析库

XML Path Language是一个小型的查询语言,根据DOM树路径一层层查找
from lxml import etree
select = etree.HTML(html代码) #格式化
selector.xpath(表达式) #返回为一列表 XPath四种标签:【注:唯一一个编号是从0开始的】
1. // 根路径,会全局扫描,取得内容后以列表的形式返回
2. / 路径 找当前或下一级内容
3. text() 获取当前路径下的文本内容;例:text(2) 取第二个
4. /@xxx 属性标签 获得当前路径下的属性值(取href值) 案例:/div[@classs="shuxing1"]/...
5. | 分割符 同时取多个路径
6. . 点 取当前节点
7. .. 两个点 取当前节点的父节点

Tips:

集合 content = set(content1) #集合可以去重,当做键

Python_爬虫笔记_2018.3.19的更多相关文章

  1. Java网络爬虫笔记

    Java网络爬虫笔记 HttpClient来代替浏览器发起请求. select找到的是元素,也就是elements,你想要获取具体某一个属性的值,还是要用attr("")方法.标签 ...

  2. Python爬虫笔记一(来自MOOC) Requests库入门

    Python爬虫笔记一(来自MOOC) 提示:本文是我在中国大学MOOC里面自学以及敲的一部分代码,纯一个记录文,如果刚好有人也是看的这个课,方便搬运在自己电脑上运行. 课程为:北京理工大学-嵩天-P ...

  3. 《深入Java虚拟机学习笔记》- 第19章 方法的调用与返回

    <深入Java虚拟机学习笔记>- 第19章 方法的调用与返回

  4. [Python爬虫笔记][随意找个博客入门(一)]

    [Python爬虫笔记][随意找个博客入门(一)] 标签(空格分隔): Python 爬虫 2016年暑假 来源博客:挣脱不足与蒙昧 1.简单的爬取特定url的html代码 import urllib ...

  5. nodejs爬虫笔记(三)---爬取YouTube网站上的视频信息

    思路:通过笔记(二)中代理的设置,已经可以对YouTube的信息进行爬取了,这几天想着爬取网站下的视频信息.通过分析YouTube,发现可以从订阅号入手,先选择几个订阅号,然后爬取订阅号里面的视频分类 ...

  6. nodejs爬虫笔记(二)---代理设置

    node爬虫代理设置 最近想爬取YouTube上面的视频信息,利用nodejs爬虫笔记(一)的方法,代码和错误如下 var request = require('request'); var chee ...

  7. Python网络爬虫笔记(五):下载、分析京东P20销售数据

    (一)  分析网页 下载下面这个链接的销售数据 https://item.jd.com/6733026.html#comment 1.      翻页的时候,谷歌F12的Network页签可以看到下面 ...

  8. 爬虫笔记之自如房屋价格图片识别(价格字段css背景图片偏移显示)

    一.前言 自如房屋详情页的价格字段用图片显示,特此破解一下以丰富一下爬虫笔记系列博文集. 二.分析 & 实现 先打开一个房屋详情页观察一下: 网页的源代码中没有直接显示价格字段,价格的显示是使 ...

  9. python爬虫笔记Day01

    python爬虫笔记第一天 Requests库的安装 先在cmd中pip install requests 再打开Python IDM写入import requests 完成requests在.py文 ...

随机推荐

  1. selenium-无窗口模式

    引入options即可 from time import sleep from selenium import webdriver from selenium.webdriver.chrome.opt ...

  2. 【Azure微服务 Service Fabric 】在SF节点中开启Performance Monitor及设置抓取进程的方式

    前提条件 当我们观察到SF中某一个节点出现CPU不正常的情况,但是由于不能肉眼长期观察,所以可以通过开启Performance Monitor的方式来获取每一个进程的%Processer Time的方 ...

  3. git 报错 error: failed to push some refs to .....

    git push 代码的时候报错,报错如下: 这种报错是因为远程仓库的代码和本地仓库的代码不同步,对本地的代码进行一次拉取,再 git push 就可以解决了 通过如下命令进行代码合并 git pul ...

  4. 10 张图打开 CPU 缓存一致性的大门

    前言 直接上,不多 BB 了. 正文 CPU Cache 的数据写入 随着时间的推移,CPU 和内存的访问性能相差越来越大,于是就在 CPU 内部嵌入了 CPU Cache(高速缓存),CPU Cac ...

  5. 【转】Setting up SDL 2 on Visual Studio 2019 Community

    FROM: http://lazyfoo.net/tutorials/SDL/01_hello_SDL/windows/msvc2019/index.php Setting up SDL 2 on V ...

  6. CodeForces 1408I Bitwise Magic

    题意 给定三个整数 \(n,k,c\) 和一个长度为 \(n\) 的序列 \(a\),保证 \(a_i\) 互不相同.可以操作 \(k\) 次,每次随机选择一个 \(a_i\) 变成 \(a_i-1\ ...

  7. ipython notesbook 默认路径修改

    Windows下,一个很简单的解决小方法! 改目录 前面很多回答已经说了怎么修改目录: 1.cmd: jupyter notebook --generate-config 2.找到 ~\.jupyte ...

  8. 2.3 spring5源码系列---内置的后置处理器PostProcess加载源码

    本文涉及主题 1. BeanFactoryPostProcessor调用过程源码剖析 2. 配置类的解析过程源码 3. 配置类@Configuration加与不加的区别 4. 重复beanName的覆 ...

  9. AQS源码深入分析之独占模式-ReentrantLock锁特性详解

    本文基于JDK-8u261源码分析 相信大部分人知道AQS是因为ReentrantLock,ReentrantLock的底层是使用AQS来实现的.还有一部分人知道共享锁(Semaphore/Count ...

  10. MYSQL中inner join、left join 和 right join的区别

    首先join连接是用来进行多表关联查询的,join连接方式有三种连接方式:inner join.left join 和 right join 1.inner join 可以简写成join,叫内连接,查 ...