zoukankan      html  css  js  c++  java
  • Python爬虫流程

    Python爬虫流程

    主要分为三个部分 (1)获取网页-------->(2)解析网页(获取数据)--------->存储数据

    三个流程的技术实现

    1.获取网页
    -获取网页的技术基础:urllib、requests、selenium
    -获取网页的进阶技术:多线程抓取、登录抓取、突破ip限制和服务器抓取
    2.解析网页
    -解析网页的技术基础:re正则表达式、BeautifulSoup和xml
    -解析网页的进阶技术:解决中文乱码问题
    3.存储数据
    -存储数据的基本技术:存入txt文件和存入csv文件
    -存储数据的进阶技术:存储mysql、mongoDB数据库中

    搭建Python爬虫的平台

    • Python的安装
    • 集成环境Anaconda的安装
    • 使用pip工具安装第三方库

    urllib.request

    urllib中,request这个模块主要负责构造和发起网络请求,并在其中加入Headers,Proxy等。

    发起GET请求

    主要使用urlopen()方法发起请求

    from urllib import request
    resp = request.urlopen('http://www.baidu.com') type(resp)
    print(resp.read().decode()) 数据为二进制数据需转码

    发起POST请求

    urlopen()默认的访问方式为GET,当在urlopen()方法中传入data参数时,则会发起pose请求
    注意:传入的data数据需要为bytes格式
    设置timeout参数还可以设置超时时间,如果请求时间超出,那么会抛出异常
    from urllib import request
    resp = request.urlopen('http://httpbin.org', data=b'word=hello', timeout=10)
    print(resp.read().decode())

    添加Headers

    通过urllib发起的请求会有默认的一个Headers:"User-Agent":Python-urllib/3.6",指明请求是由urllib发送的。
    **所以遇到一些验证User-Agent的 网站时,我们需要自定义Headers,而这需要借助于urllib.request中的Request对象。
    from urllib import request
    url = 'http://httpbin.org/get'
    headers = {'user-agent': 'Mozilla/5.0 xxxxxxxxxxxxxxxxxxxxxx'}

    **需要使用url和headers生成一个Request对象,然后将其传入urlopen方法中
    req = request.Request(url, headers=headers)
    resp = request.urlopen(req)
    print(resp.read().decode())

    Request对象

    如上所示,urlopen()方法中不止可以传入字符串格式的url,也可以传入一个Request对象来扩展功能。Request对象如下所示:
    class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
    构造Request对象必须传入url参数, data数据和headers都是可选的。
    Request方法可以使用method参数来自由选择请求的方法,如PUT, DELETE等等,默认为GET方法。

    添加Cookie

    为了在请求时能带上Cookie信息,我们需要重新构造一个opener
    使用request.build_opener方法进行构造opener,将我们想要传递的cookie配置到opener中,然后使用这个opener的open方法来发起请求。

    User_Agent:

  • 相关阅读:
    Android应用性能优化
    打造高质量Android应用:Android开发必知的50个诀窍
    毕向东day23--java基础-网络总结
    《编写高质量代码:改善Java程序的151个建议》
    最新java数组的详解
    主线程中一定不能放耗时操作,必须要开子线程,比如下载文件,不然会不让你拿到输入流--报错显示android.os.NetworkOnMainThreadException
    《Head First设计模式(中文版)》
    码表由来:ascll码-Gbk2312-GBK-Unicode-UTF-8
    《Java程序性能优化:让你的Java程序更快、更稳定》
    LeetCode 147. 对链表进行插入排序
  • 原文地址:https://www.cnblogs.com/xuxaut-558/p/10071949.html
Copyright © 2011-2022 走看看