爬虫

爬虫分类

详见:BelieverH的https://blog.csdn.net/Taneost/article/details/102780280
1.通用网络爬虫:门户站点搜索引擎、大型Web服务提供商采集数据,又称为全网爬虫。
2.聚焦网络爬虫:根据需求,实现爬虫程序,爬取需要的数据,又称为主题网络爬虫。传输协议都是http/https
3.增量式网络爬虫:抓取刚刚更新的数据。
4.深层网络爬虫:分表层网络和深层网络。

爬虫技术:

1.抓取HTML页面:

  • HTTP请求的处理: urllib, urlib2, requests
  • 处理器的请求可以模拟浏览器发送请求,获取服务器响应的文件

2.解析服务器相应的内容:

  • re, xpath, BeautifulSoup(bs4), jsonpath, pyquery
  • 使用某种描述性语言来给我们需要提取的数据定义一个匹配规则,符合这个规则的数据就会被匹配

3.采集动态HTML,验证码的处理

  • 通用动态页面采集: Selenium + PhantomJS:模拟真实浏览器加载JS
  • 验证码处理: Tesseract机器学习库,机器图像识别系统

4.Scrapy框架:

  • 高定制性,高性能(异步网络框架twisted)->数据下载快
  • 提供了数据存储,数据下载,提取规则等组件

5.分布式策略:

  • scrapy redis:在scarpy基础上添加了以redis数据库为核心的一套组件,主要在redis做请求指纹去重、请求分配、数据临时存储

6.爬虫、反爬虫、反反爬虫之间的斗争:

  • User-Agent, 代理, 验证码, 动态数据加载, 加密数据

访问页面->爬取数据->数据存储->数据处理->提供检索服务

常见服务器端口号:

  • http:80
  • https:443
  • ftp:21
  • ssh:22
  • mysql:3306
  • MongoDB:27017
  • redis:6379

    https :// www.baidu.com : 80 /s/sso/area ? uname=dancer&pword=12345 # anchor

  • https: 【协议】
  • www.baidu.com 【Host】
  • 80 【端口号】
  • s/sso/area 【资源路径】
  • uname=dancer&pword=12345 【query-string参数】
  • anchor 【锚点】

urllib库

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

使用:

import urllib request
url = 'http://xxxxxx' #你要爬取的地址
response = urllib.request.urlopen(url=url) #获取的是一个HTTPResponse对象
html = reponse.read().decode('utf8')#显示页面源码
HTTPResponse对象有:read(),readinto(),getheader(name),getheaders()【获取响应dui'x】,fileno(),getcode()等方法,以及msg,status,reason,debuglevel,closed等属性。
  • 也可以给链接传递一些参数
    • url(url,data=None,[timeout,]*,cafile=None,capath=None,cadefault=Flase,context=None)
      • 常用的也是前三个参数:url,附加数据data,超时时间timeout
    • urllib.request.Request(url,data=None,headers={},origin_req_host=None,unverifiable=False,method=None)
      • 第二个参数data要传必须是bytes(字节流)类型的
        data=bytes(urllib.parse.urlencode({'word':'hello'}),encoding='utf8)
      • 第三个参数是headers,是一个字典,请求头。
      • 第四个参数是指请求方的host名称或IP地址。
      • 第五个参数是表示这个请求是否无法验证,默认是False
      • 第六个参数是一个字符串,用来指示请求使用的方法,比如GET,POST,PUT等。

        python 内置的HTTP请求库

  • urllib.request:请求模块
  • urllib.error:异常处理模块
  • urllib.parse:解析模块(拆分、合并等)
    • urllib.parse.urlencode()方法用来将参数字典转换为字符串
  • urllib.robotparser:robot.txt解析模块
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务