Python爬虫初学二(网络数据采集)

目录

一、网络数据采集

1.什么是网络数据采集

2.网络数据采集的特点

二、网络数据采集之urllib库

三、网络数据采集之requests库

1.requests安装

2.request方法汇总

3.response对象汇总

4.response对象

四.高级应用一:添加headers

五.高级应用二:IP代理设置

 六.项目案例一:京东商品的爬取

七.项目案例二:百度/360搜索关键字提交百度/360搜索关键字提交

一、网络数据采集

1.什么是网络数据采集

“网络数据采集”是指利用互联网搜索引擎技术实现有针对性、行业性、精准性的数据抓取,并按照一定规则和筛选标准进行数据归类,并形成数据库文件的一个过程。

2.网络数据采集的特点

  • 支持自定义表单
  • 支持自适应采集。
  • 支持集群采集。
  • 支持各种报表导出。
  • 支持仿人工式的随机采集数据。
  • 支持自定义阅读模板。
  • 支持登陆、代理采集。
  • 支持各种列表分页采集。
  • 支持各种内容分页采集。
  • 支持各种排重过滤。
  • 各种采集日志和采集源日志监控。
  • 支持采集网站、采集源管理。
  • 支持采集图片、附件、音频,视频等文件或附件。附件与正文自动映射与关联。
  • 支持多种附件保存方式,可保存至磁盘或数据库。
  • 支持附件的压缩存储。
  • 支持对采集来的信息进行二次加工。支持采集内容的自动排版。
  • 真正的多用户采集系统,每个操作都要记录操作内容、操作人以及操作时间。
  • 真正的多线层、多任务采集、集群采集。
  • 图形监控网络使用情况、采集情况等。
  • 支持海量数据采集。
  • 软件实用、易用、功能强大。
  • 可移植、可扩展、可定制。

Python 给人的印象是抓取网页非常方便,提供这种生产力的,主要依靠的就是 urllib、requests这两个模块。

这里重点介绍requests模块。

二、网络数据采集之urllib库

官方文档地址:https://docs.python.org/3/library/urllib.html
urllib库是python的内置HTTP请求库,包含以下各个模块内容:
(1)urllib.request:请求模块
(2)urllib.error:异常处理模块
(3)urllib.parse:解析模块
(4)urllib.robotparser:robots.txt解析模块

urlopen进行简单的网站请求,不支持复杂功能如验证、cookie和其他HTTP高级功能,若要支持这些功能必须使用build_opener()函数返回的OpenerDirector对象。

很多网站为了防止程序爬虫爬网站照成网站瘫痪,会需要携带一些headers头部信息才能访问, 我们可以通过urllib.request.Request对象指定请求头部信息.

from urllib.request import urlopen, Request

# 方法一: 通过get方法请求url
with urlopen('http://www.python.org/') as f:
    # 默认返回的页面信息是bytes类型, bytes类型转换成字符串,decode方法。
    print(f.read(300).decode('utf-8'))

#  方法二: Request对象发起请求
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'
# 封装请求头部信息, 模拟浏览器向服务器发起请求
request = Request('http://www.python.org/', headers={'User-Agent': user_agent})
with urlopen(request) as f:
    # 默认返回的页面信息是bytes类型, bytes类型转换成字符串,decode方法。
    print(f.read(300).decode('utf-8'))

运行结果如下:

三、网络数据采集之requests库

1.requests安装

requests官方网址: https://requests.readthedocs.io/en/master/
安装:

pip install -i http://pypi.douban.com/simple requests

2.request方法汇总

方法   说明
requests.request()  构造一个请求,支撑以下各方法的基础方法
requests.get()获取HTML网页的主要方法,对应于HTTP的GET
requests.head() 获取HTML网页头信息的方法
requests.post()向HTML网页提交POST请求的方法,对应于HTTP的POST
requests.put()向HTML网页提交PUT请求的方法,对应于HTTP的PUT
requests.patch() 向HTML网页提交局部修改请求,对应于HTTP的PATCH
requests.delete() 向HTML页面提交删除请求,对应于HTTP的DELETE

3.response对象汇总

from urllib.error import HTTPError

import requests


def get():
    # get方法可以获取页面数据,也可以提交非敏感数据
    # url = 'http://127.0.0.1:5000/'
    # url = 'http://127.0.0.1:5000/?username=fentiao&page=1&per_page=5'
    url = 'http://127.0.0.1:5000/'
    try:
        params = {
            'username': 'lucky',
            'page': 1,
            'per_page': 5
        }
        response = requests.get(url, params=params)
        print(response.text, response.url)
        # print(response)
        # print(response.status_code)
        # print(response.text)
        # print(response.content)
        # print(response.encoding)
    except HTTPError as e:
        print("爬虫爬取%s失败: %s" % (url, e.reason))


def post():
    url = 'http://127.0.0.1:5000/post'
    try:
        data = {
            'username': 'admin',
            'password': 'westos12'
        }
        response = requests.post(url, data=data)
        print(response.text)
    except HTTPError as e:
        print("爬虫爬取%s失败: %s" % (url, e.reason))


if __name__ == '__main__':
    get()
    # post()

4.response对象

Response对象包含服务器返回的所有信息,也包含请求的Request信息。

属性说明
r.status_codeHTTP请求的返回状态,200表示连接成功,404失败
r.textHTTP响应内容的字符串形式,URL对应的页面内容
r.contentHTTP响应内容的二进制形式
r.encoding从HTTP header中猜测的响应内容编码方式
r.apparent_encoding 从内容中分析出的响应的编码方式(备选编码方式)
 

四.高级应用一:添加headers

有些网站访问时必须带有浏览器等信息,如果不传入headers就会报错

headers = {'User=Agent':useragent}
response = requests.get(url, headers = heders)

UserAgent是识别浏览器的一串字符串,相当于浏览器的身份证,在利用爬虫爬取网站数据时,频繁更换UserAgent可以避免触发相应的反爬机制。
fake-useragent对频繁更换UserAgent提供了很好的支持,可谓防反扒利器。

# 用户代理
import requests
from fake_useragent import UserAgent

def add_headers():
    """
    封装一个请求头部,获取页面的时候加进去,get,post都可以
    不同的浏览器 请求头部不同
    """
    #谷歌浏览器的请求头部 拷贝过来
    # headers= {'user_Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'}
    # 默认情况下python爬虫的用户代理是:客户端请求的user_agent: python-requests/2.22.0

    ua = UserAgent() # 从网络获取所有的用户代理
    # print(ua.random) #可以随机拿出一个用户代理
    headers = {'user_Agent': ua.random}
    response = requests.get('http://127.0.0.1:5000', headers=headers)
    print(response)

if __name__ == '__main__':
    add_headers()

五.高级应用二:IP代理设置

在进行爬虫爬取时,有时候爬虫会被服务器给屏蔽掉,这时采用的方法主要有降低访问时间,通过代理IP访问。ip可以从网上抓取,或者某宝购买。

proxies = { "http": "http://127.0.0.1:9743", "https": "https://127.0.0.1:9743",} 
response = requests.get(url, proxies=proxies)
# IP代理
import requests
from fake_useragent import UserAgent

ua = UserAgent()
# 代理IP
proxies = {
    'http':'http://222.95.144.65:3000',
    'https':'https://182.92.220.212:8080'
}
response = requests.get('http://47.92.255.98:8000',
             headers = {'User-Agent':ua.random},
             proxies = proxies)

print(response)
# 这是因为服务器端会返回数据:get提交的数据和请求的客户端ip
#如何判断是否成功:返回的客户端IP刚好是代理IP
print(response.text)

 六.项目案例一:京东商品的爬取

from urllib.error import HTTPError

import requests
from colorama import Fore
from fake_useragent import UserAgent


def download_page(url, parmas=None):
    try:
        ua = UserAgent()
        headers = {'User-Agent': ua.random}
        response = requests.get(url, params=parmas, headers=headers)
    except  HTTPError as e:
        print(Fore.RED + '[-] 爬取网站%s失败: %s' % (url, e.reason))
        return None
    else:
        # content返回的是bytes类型
        return response.content


def download_file(content=b'', filename='hello.html'):
    """
    :param content: 要写入本地的html字符bytes类型
    :param filename: 写入本地的文件名
    :return:
    """
    with open(filename, 'wb') as f:
        f.write(content)
        print(Fore.GREEN + '[+]写入文件%s成功' % (filename))


if __name__ == '__main__':
    # url = 'https://item.jd.com/100012015170.html'
    # html = download_page(url)
    # download_file(content=html)
    url = 'https://www.so.com/s'
    params = {
        'q': 'python'
    }
    content = download_page(url, params)
    download_file(content)

测试结果:

 

七.项目案例二:百度/360搜索关键字提交百度/360搜索关键字提交

百度的关键词接口:https://www.baidu.com/baidu?wd=xxx&tn=monline_4_dg
360的关键词接口:http://www.so.com/s?q=keyword

from urllib.error import HTTPError
from colorama import Fore
import requests
from fake_useragent import UserAgent

def download_page(url, params=None):
        try:
            ua = UserAgent()
            headers = {'User-Agent': ua.random}
            response = requests.get(url, params=params, headers = headers)
        except HTTPError as e:
            print(Fore.RED + '[-] 爬取网站失败:%s' %(url, e.reason) )
            return None
        else:
            return response.content  #content 返回的是bytes类型

def download_file(content = b'' ,filename='craw.html'):
    """
    :param filename: 写入本地的文件名
    :param content: 要写入本地的html字符串  bytes类型
    :return:
    """
    with open(filename, 'wb') as f:
        f.write(content)
        print(Fore.GREEN+'[+] 写入文件%s成功' %(filename))

if __name__ == '__main__':
    url = 'https://www.so.com/s'
    params = {
        'q':'python'
    }
    content = download_page(url,params)
    download_file(content)

  测试结果:


 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
Python网络数据采集》和《python网络编程》2合1,phthon学习必备,图灵精品,学程序一定要多敲代码,一定要多思考,敲着敲着感觉就来了。坚持不懈!加油!! 《Python网络数据采集》高清完整版,非常清晰,欢迎下载。 作者: [美] 米切尔 出版社: 人民邮电出版社 译者: 陶俊杰 / 陈小莉 出版年: 2016-3-1 --------------------------------------------- 目录 · · · · · · 译者序  ix 前言  xi 第一部分 创建爬虫 第1章 初见网络爬虫  2 1.1 网络连接  2 1.2 BeautifulSoup简介  4 1.2.1 安装BeautifulSoup  5 1.2.2 运行BeautifulSoup  7 1.2.3 可靠的网络连接  8 第2章 复杂HTML解析  11 2.1 不是一直都要用锤子  11 2.2 再端一碗BeautifulSoup  12 2.2.1 BeautifulSoup的find()和findAll()  13 2.2.2 其他BeautifulSoup对象  15 2.2.3 导航树  16 2.3 正则表达式  19 2.4 正则表达式和BeautifulSoup  23 2.5 获取属性  24 2.6 Lambda表达式  24 2.7 超越BeautifulSoup  2 5 第3章 开始采集  26 3.1 遍历单个域名  26 3.2 采集整个网站  30 3.3 通过互联网采集  34 3.4 用Scrapy采集  38 第4章 使用API  42 4.1 API概述  43 4.2 API通用规则  43 4.2.1 方法  44 4.2.2 验证  44 4.3 服务器响应  45 4.4 Echo Nest  46 4.5 Twitter API  48 4.5.1 开始  48 4.5.2 几个示例  50 4.6 Google API  52 4.6.1 开始  52 4.6.2 几个示例  53 4.7 解析JSON数据  55 4.8 回到主题  56 4.9 再说一点API  60 第5章 存储数据  61 5.1 媒体文件  61 5.2 把数据存储到CSV  64 5.3 MySQL  65 5.3.1 安装MySQL  66 5.3.2 基本命令  68 5.3.3 与Python整合  71 5.3.4 数据库技术与最佳实践  74 5.3.5 MySQL里的“六度空间游戏”  75 5.4 Email  77 第6章 读取文档  80 6.1 文档编码  80 6.2 纯文本  81 6.3 CSV  85 6.4 PDF  87 6.5 微软Word和.docx  88 第部分 高级数据采集 第7章 数据清洗  94 7.1 编写代码清洗数据  94 7.2 数据存储后再清洗  98 第8章 自然语言处理  103 8.1 概括数据  104 8.2 马尔可夫模型  106 8.3 自然语言工具包  112 8.3.1 安装与设置  112 8.3.2 用NLTK做统计分析  113 8.3.3 用NLTK做词性分析  115 8.4 其他资源  119 第9章 穿越网页表单与登录窗口进行采集  120 9.1 Python Requests库  120 9.2 提交一个基本表单  121 9.3 单选按钮、复选框和其他输入  123 9.4 提交文件和图像  124 9.5 处理登录和cookie  125 9.6 其他表单问题  127 第10章 采集JavaScript  128 10.1 JavaScript简介  128 10.2 Ajax和动态HTML  131 10.3 处理重定向  137 第11章 图像识别与文字处理  139 11.1 OCR库概述  140 11.1.1 Pillow  140 11.1.2 Tesseract  140 11.1.3 NumPy  141 11.2 处理格式规范的文字  142 11.3 读取验证码与训练Tesseract  146 11.4 获取验证码提交答案  151 第12章 避开采集陷阱  154 12.1 道德规范  154 12.2 让网络机器人看起来像人类用户  155 12.2.1 修改请求头  155 12.2.2 处理cookie  157 12.2.3 时间就是一切  159 12.3 常见表单安全措施  159 12.3.1 隐含输入字段值  159 12.3.2 避免蜜罐  160 12.4 问题检查表  162 第13章 用爬虫测试网站  164 13.1 测试简介  164 13.2 Python单元测试  165 13.3 Selenium单元测试  168 13.4 Python单元测试与Selenium单元测试的选择  172 第14章 远程采集  174 14.1 为什么要用远程服务器  174 14.1.1 避免IP地址被封杀  174 14.1.2 移植性与扩展性  175 14.2 Tor代理服务器  176 14.3 远程主机  177 14.3.1 从网站主机运行  178 14.3.2 从云主机运行  178 14.4 其他资源  179 14.5 勇往直前  180 附录A Python简介  181 附录B 互联网简介  184 附录C 网络数据采集的法律与道德约束  188
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值