返回顶部
首页 > 资讯 > 后端开发 > Python >Python_爬虫基础
  • 956
分享到

Python_爬虫基础

爬虫基础 2023-01-31 06:01:27 956人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

爬虫概念 数据获取的方式: 企业生产的用户数据:大型互联网公司有海量用户,所以他们积累数据有天然优势。有数据意识的中小型企业,也开始积累的数据。 数据管理咨询公司 政府/机构提供的公开数据 第三方数据平台购买数据 爬虫爬取数据 什么是

爬虫概念

数据获取的方式:

  • 企业生产的用户数据:大型互联网公司有海量用户,所以他们积累数据有天然优势。有数据意识的中小型企业,也开始积累的数据。
  • 数据管理咨询公司
  • 政府/机构提供的公开数据
  • 第三方数据平台购买数据
  • 爬虫爬取数据
什么是爬虫

抓去网页数据的程序

网页三大特征:

  • 每个网页都有自己的URL
  • 网页都使用html标记语言来描述页面信息
  • 网页都使用Http/https协议来传输HTML数据
爬虫的设计思路
  1. 确定需要爬取的网页URL地址
  2. 通过HTTP/HTTPS协议来获取对应的HTML页面
  3. 提取HTML页面中的数据
    如果是需要的数据,就保存起来
    如果页面是其它URL,那就继续爬取

如何抓取HTML页面
HTTP协议请求的处理,urllib, urllib2, requests,处理后的请求可以模拟浏览器发送请求,获取服务器响应的文件

解析服务器响应的内容
re, xpath(常用), BeautifulSoup4(bs4), JSONpath, pyquery等使用某种描述性一样来给需要提取的数据定义一个匹配规则,符合这个规则的数据就会被匹配。

如何采集动态HTML,验证码的处理
selenium(自动化测试工具) + Phantomjs(无界面浏览器)
验证码处理通过Tesseract: 机器图像识别系统(图片中的文本识别)

Scrapy框架
(scrapy, Pyspider)

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

分布式策略

  1. 是否有那么多的机器去做分布式?
  2. 获取的数据是否值得搭建分布式系统?

使用scrapy-Redis来搭建,在Scrapy的基础上添加了一套 Redis数据库为核心的一套组件,让Scrapy框架支持分布式的功能。主要在Redis中做请求指纹去重请求分配数据临时存储

爬虫 - 反爬虫 - 反反爬虫

反爬虫: User-Agent, IP, 代理, 验证码, 动态数据加载, 加密数据
数据的价值,是否值得去费劲去做反爬虫,一般做到代理阶段或封IP
机器成本 + 人力成本 > 数据价值

爬虫和反爬虫之间的斗争,最后一定是爬虫获胜。
只要是真实用户可以浏览的网页数据,爬虫就一定能爬下来。(爬虫模拟浏览器获取数据)

爬虫集合awesome-spider

通用爬虫

索引擎使用的爬虫系统

目标:尽可能把互联网上所有的网页下载下来,放到本地服务器里形成备份,再对这些网页做相关处理(提取关键字,去掉广告),最后提供一个用户检索接口

抓取流程:

  • 首先选取一部分已有的URL,把这些URL放到待爬取队列。
  • 从队列里去取出这些URL,然后解析DNS得到主机IP,然后去这个IP对应的服务器下载HTML页面,保存到搜索引擎的本地服务器里,之后把这个已经爬过的URL放入到已经爬取队列中
  • 分析网页内容,找出网页中的其它URL内容,继续爬取。

搜索引擎如何获取一个新网站的URL:

  • 主动向搜索引擎提交网址: 百度搜索资源平台
  • 在其它网站设置外链
  • 搜索引擎会和DNS服务商进行合作,可以快速收录新的网站

通用爬虫并不是万物皆可爬,它也需要遵守规则:
Robots协议,协议会指明通用爬虫可以爬取网页的权限。
Robots.txt并不是所有爬虫都遵守,一般只有大型搜索引擎爬虫才会遵守。

通用爬虫工作流程:
爬取网页 -> 存储数据 -> 内容处理 -> 提供检索/排名服务

搜索引擎排名:

  • PageRank值:根据网站的流量(pv),流量越高,排名约靠前
  • 竞价排名

通用爬虫的缺点:

  1. 只能提供和文本相关的内容(HTML,Wordpdf)等,但是不能提供多媒体(音乐,视频,图片)和二进制文件。
  2. 提供的结果千篇一律,不能针对不同领域的人提供不同的搜索结果。
  3. 不能理解人类语义上的检索。

DNS: 把域名解析成IP

聚焦爬虫

爬虫程序员写的针对某种内容爬虫。(针对通用爬虫的缺点)

面向主题爬虫,面向需求爬虫,会针对某种特定的内容去爬取信息,而且会保证内容信息和需求尽可能相关。

HTTP&HTTPS

HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收HTML页面的方法。

HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)简单讲是HTTP安全版,在HTTP下加入SSL

SSL(Secure Sockets Layer 安全套接层)主要用于WEB的安全传输协议,在传输层对网络连接进行加密,保障在Internet上数据传输的安全。

  • HTTP的端口号为80
  • HTTPS的端口号为443

HTTP工作原理

网络爬虫抓取过程可以理解为模拟浏览器操作的过程

浏览器的主要功能是向服务器发出请求,在浏览器窗口中展示您选择的网络资源,HTTP是一套计算机通过网络进行通信的规则。

常用的请求报头:

  • Host (主机和端口号): 对应网址URL中的Web名称和端口号,用于指定被请求资源的Internet主机和端口号,通常属于URL的一部分。
  • Connection (链接类型): 表示客户端与服务连接类型

    1. Client 发起一个包含 Connection:keep-alive 的请求,HTTP/1.1使用 keep-alive 为默认值。
    2. Server收到请求后:如果 Server 支持 keep-alive,回复一个包含 Connection:keep-alive 的响应,不关闭连接; 如果 Server 不支持keep-alive,回复一个包含 Connection:close 的响应,关闭连接。
    3. 如果client收到包含 Connection:keep-alive 的响应,向同一个连接发送下一个请求,直到一方主动关闭连接。
    4. keep-alive在很多情况下能够重用连接,减少资源消耗,缩短响应时间,比如当浏览器需要多个文件时(比如一个HTML文件和相关的图形文件),不需要每次都去请求建立连接。
  • Upgrade-Insecure-Requests (升级为HTTPS请求): 升级不安全的请求,意思是会在加载 http 资源时自动替换成 https 请求,让浏览器不再显示https页面中的http请求警报。(HTTPS 是以安全为目标的 HTTP 通道,所以在 HTTPS 承载的页面上不允许出现 HTTP 请求,一旦出现就是提示或报错。)
  • User-Agent (浏览器名称): 是客户浏览器的名称
  • Accept (传输文件类型): 指浏览器或其他客户端可以接受的MIME(Multipurpose Internet Mail Extensions(多用途互联网邮件扩展))文件类型,服务器可以根据它判断并返回适当的文件格式。

    1. Accept: **;q=0.8', 'Host': 'www.xicidaili.com', 'Referer': 'http: // www.xicidaili.com/nn', 'User-Agent': 'Mozilla/5.0 (windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6726.400 QQBrowser/10.2.2265.400' } ret = requests.get(url, headers=headers) xmlDom = etree.HTML(ret.text) data = xmlDom.xpath('//table[@id="ip_list"]//tr') z = [] for tr in data: if tr.xpath('td'): ip = tr.xpath('td')[1].text # 获取所有IP port = tr.xpath('td')[2].text # 获取所有端口 z.append(ip + ':' + port) return z def get_url(url, code=0, ips=[]): ''' 投票 如果因为代理IP已失效造成投票失败,则会自动换一个代理IP后继续投票 ''' try: ip = choice(ips) print(ip, 'ip' * 5) except: return False else: proxies = { 'http': ip } headers = { 'Content-Type': 'application/x-www-fORM-urlencoded; charset=UTF-8', 'Host': 'best.zhaopin.com', 'Origin': 'https: // best.zhaopin.com', 'Referer': 'https//best.zhaopin.com/?sid=121128100&site=sou', 'User-Agent': ua_list.random } print(ua_list.random, 'ua_list' * 5) try: data = {'bestid': '3713', 'score': '5,5,5,5,5,5', 'source': 'best'} # 跳过证书的验证 verify=False result = requests.post(url, data=data, headers=headers, proxies=proxies) print(result, 'result' * 5) except requests.exceptions.ConnectionError: print('ConnectionError') if not ips: print('ip 失效') sys.exit() # 删除不可用的代理IP if ip in ips: ips.remove(ip) # 重新请求url get_url(url, code=0, ips=[]) else: date = datetime.datetime.now().strftime('%H:%M:%S') # result.text() 投票成功显示1 失败显示0 print('第%s次 [%s] [%s]:投票%s (剩余可用代理IP数:%s)' % (code, date, ip, result.text, len(ips))) def main(): url = 'https://best.zhaopin.com/api/ScoreCompany.ashx' # 投票的请求 ips = [] for i in range(6000): if i % 1000 == 0: ips.extend(get_ip()) # print('-' * 100) # print(ips) t = threading.Thread(target=get_url, args=(url, i, ips)) t.start() time.sleep(1) if __name__ == '__main__': main()

      Tesseract

      机器识别中的文字识别

      pip install pytesseract

      识别图片中的文字:

      #conding=utf-8
      
      import pytesseract
      from PIL import Image
      
      image = Image.open('./mayday.jpg')
      
      text = pytesseract.image_to_string(image)
      
      print(text)

      asyncio & aiohttp

      通过异步库aiohttp,asyncio爬取图片

      # -*- coding:utf-8 -*-
      import asyncio
      import os
      import time
      
      import aiohttp
      import requests
      
      
      class Spider(object):
          def __init__(self):
              self.num = 1
              if 'load-img' not in os.listdir('.'):
                  os.mkdir('load-img')
              self.path = os.path.join(os.path.abspath('.'), 'load-img')
              os.chdir(self.path)  # 进入文件下载路径
      
          def run(self):
              start = time.time()
              for x in range(1, 101): # 爬取100张图片,更改数值,爬取更多图片
                  links = self.__get_img_links(x)
                  tasks = [asyncio.ensure_future(self.__download_img(
                      (link['id'], link['links']['download'])
                  )) for link in links]
                  loop = asyncio.get_event_loop()
                  loop.run_until_complete(asyncio.wait(tasks))
                  # if self.num >= 10:
                  #     break
              end = time.time()
              print('run %s s' % (end - start))
      
          def __get_img_links(self, page):
              url = 'https://unsplash.com/napi/photos'
              data = {
                  'page': page,
                  'per_page': 12,
                  'order_by': 'latest'
              }
              response = requests.get(url, params=data)
              if response.status_code == 200:
                  return response.json()
              else:
                  print('request %s' % response.status_code)
      
          async def __download_img(self, img):
              content = await self.__get_content(img[1])
              with open(img[0] + '.jpg', 'wb') as f:
                  f.write(content)
              print('load %s page success' % self.num)
              self.num += 1
      
          async def __get_content(self, link):
              async with aiohttp.ClientSession() as session:
                  response = await session.get(link)
                  content = await response.read()
                  return content
      
      
      def main():
          spider = Spider()
          spider.run()
      
      
      if __name__ == '__main__':
          main()
      

--结束END--

本文标题: Python_爬虫基础

本文链接: https://lsjlt.com/news/189312.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python_爬虫基础
    爬虫概念 数据获取的方式: 企业生产的用户数据:大型互联网公司有海量用户,所以他们积累数据有天然优势。有数据意识的中小型企业,也开始积累的数据。 数据管理咨询公司 政府/机构提供的公开数据 第三方数据平台购买数据 爬虫爬取数据 什么是...
    99+
    2023-01-31
    爬虫 基础
  • 【Python】爬虫基础
    爬虫是一种模拟浏览器实现,用以抓取网站信息的程序或者脚本。常见的爬虫有三大类: 通用式爬虫:通用式爬虫用以爬取一整个网页的信息。 聚焦式爬虫:聚焦式爬虫可以在通用式爬虫爬取到的一整个网页的信息基础上只选取一部分所需的信息。 增量式爬虫:增量...
    99+
    2023-09-14
    python 爬虫 数据挖掘
  • python爬虫基础
    Note:一:简单爬虫的基本步骤1.爬虫的前奏: (1)明确目的 (2)找到数据对应的网页 (3)分析网页的结构,找到数据的位置2.爬虫第二步:__fetch_content方法 模拟HTTP请求,向服务器发送这个...
    99+
    2023-01-30
    爬虫 基础 python
  • Python之爬虫基础
    网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫...
    99+
    2023-08-31
    python 爬虫 开发语言
  • Python爬虫入门:爬虫基础了解
    Python爬虫入门(1):综述 Python爬虫入门(2):爬虫基础了解 Python爬虫入门(3):Urllib库的基本使用 Python爬虫入门(4):Urllib库的高级用法 Python爬虫入门(5):URLError异常...
    99+
    2023-01-30
    爬虫 入门 基础
  • Python_基础_01
    Python特点:字节码,动态语义 定义编码:只要符合coding[:=]\s*([-\w.]+)即可。如 #coding= utf-8 # -*- coding: utf-8 -*-"双引号内写脚本文档"#这里以后都是单行注释"""这里是...
    99+
    2023-01-31
    基础
  • 爬虫基础(二)——网页
    前言   爬虫要爬取的信息主要来自于网页加载的内容,有必要了解一些网页的知识。   当我们在浏览器网址栏输入一个网址——URL,经过TCP/IP协议簇的处理,这个网址请求的信息就被发送到URL对应的服务器,接着服务器处理这个请求,并将请求...
    99+
    2023-01-30
    爬虫 网页 基础
  • Python爬虫基础(一)——HTTP
    前言   因特网联系的是世界各地的计算机(通过电缆),万维网联系的是网上的各种各样资源(通过超文本链接),如静态的HTML文件,动态的软件程序······。由于万维网的存在,处于因特网中的每台计算机可以很方便地进行消息交流、文件资源交流·...
    99+
    2023-01-30
    爬虫 基础 Python
  • python基础之爬虫入门
    目录前言一、简单静态网页的爬取1.1 选取爬虫策略——缩略图1.2 选取爬虫策略——高清大图二、动态加载网站的爬取2.1 选取爬虫策略——selenium2.2 选取爬虫策略——ap...
    99+
    2024-04-02
  • Python爬虫基础初探selenium
    目录Seleniumselenium的用途selenium是优缺点1. Selenium工作原理1.1 Selenium配置1.2 浏览器驱动1.3 使用Selenium2 快速入门...
    99+
    2024-04-02
  • 零基础学习Python爬虫
    目录爬虫为什么我们要使用爬虫爬虫准备工作爬虫项目讲解代码分析1.爬取网页2.逐一解析数据3.保存数据讲解我们的爬虫之前,先概述关于爬虫的简单概念(毕竟是零基础教程) 爬虫 网络爬虫(...
    99+
    2024-04-02
  • python爬虫之『入门基础』
    1.首先需要了解一下http请求,当用户在地址栏中输入网址,发送网络请求的过程是什么? 可以参考我之前学习的时候转载的一篇文章一次完整的HTTP事务过程–超详细 2.还需要了解一下http的请求方式 有兴趣的同学可以去查一下http的八...
    99+
    2023-01-31
    爬虫 入门 基础
  • python3 爬虫 零基础快速上手(爬
    (补1:由于csdn页面重构了,看到有很多人浏览,特地更新一下获取内容补充的字都为绿字) Python是一种面向对象的解释型计算机程序设计语言,类似c,java ,php,JavaScript一种语言,比如,完成同一个任务,C语言要写10...
    99+
    2023-01-31
    爬虫 上手 快速
  • Python爬虫基础之初次使用scrapy爬虫实例
    项目需求 在专门供爬虫初学者训练爬虫技术的网站(http://quotes.toscrape.com)上爬取名言警句。 创建项目 在开始爬取之前,必须创建一个新的Scrapy项目。进入您打算存储代码的目录中,运行下列...
    99+
    2022-06-02
    Python scrapy框架 Python爬虫
  • Python爬虫基础之爬虫的分类知识总结
    目录一、通用爬虫二、搜索引擎的局限性三、Robots协议四、请求与相应一、通用爬虫 通用网络爬虫是搜索引擎抓取系统(Baidu、Google、Sogou等)的一个重要组成部分。主要目...
    99+
    2024-04-02
  • Python爬虫基础之requestes模块
    一、爬虫的流程 开始学习爬虫,我们必须了解爬虫的流程框架。在我看来爬虫的流程大概就是三步,即不论我们爬取的是什么数据,总是可以把爬虫的流程归纳总结为这三步: 指定 url,可以简单的理解为指定要爬取的网址 发送请求。...
    99+
    2022-06-02
    Python requestes模块 python爬虫
  • Python爬虫基础--分布式爬取贝壳网
      1. server_code01 2. server_code02 3. server_code03   ...
    99+
    2023-01-30
    爬虫 分布式 贝壳
  • Python爬虫基础讲解之请求
    目录一、请求目标(URL)二、网址的组成:三、请求体(response)四、请求方法(Method)五、常用的请求报头六、requests模块查看请求体一、请求目标(URL) URL...
    99+
    2024-04-02
  • 基础爬虫,谁学谁会,用requests、
    爬取豆瓣Top250电影的评分、海报、影评等数据!   本项目是爬虫中最基础的,最简单的一例; 后面会有利用爬虫框架来完成更高级、自动化的爬虫程序。   此项目过程是运用requests请求库来获取html,再用正则表达式来解析从中获取所...
    99+
    2023-01-30
    爬虫 谁会 基础
  • 零基础怎么学习Python爬虫
    本篇内容主要讲解“零基础怎么学习Python爬虫”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“零基础怎么学习Python爬虫”吧!  零基础如何学爬虫技术?对于迷茫的初学者来说,爬虫技术起步学习...
    99+
    2023-06-01
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作