Python网络爬虫基础(一)


1. HTTP简介

1.1 HTTP请求格式

当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信 息,HTTP请求信息由3部分组成:
- 请求方法 URI 协议/版本
- 请求头(Request Header):http://www.atool.org/httptest.php
- 请求正文
这里写图片描述

1.2 HTTP请求方式

  • 常见的http请求方式有get和post
  • Get是比较简单的http请求,直接会将发送给web服务器的数据放在请求地址的后面, 即在请求地址后面使用?key1=value1&key2=value2形式传递数据,只适合于数据量 少,且没有安全性要求的请求
  • Post是将需要发送给web服务器的数据经过编码放到请求体中,可以传递大量数据, 并且有一定的安全性,常用于表单提交

1.3 浏览器开发者工具使用

右击鼠标选择检查
这里写图片描述

1.4 HTTP GET请求查看

这里写图片描述

1.5 HTTP POST请求查看

这里写图片描述

2. urllib和urllib2模块使用

2.1 模块介绍及两模块异同

  • urllib和urllib2,是功能强大的网络编程函数库,通过它们在网络上访问文件就像 访问本地电脑上的文件一样。通过一个简单的函数调用,几乎可以把任何url所指 向的东西用做程序的输入
  • urllib和urllib2与re模块(正则表达式)结合,可以下载web页面,提取页面上的数 据信息,以及自动生成报告
  • urllib2可以接受一个Request类的实例来设置URL请求的headers,urllib仅可 以接受URL。这意味着,你不可以通过urllib模块伪装你的User Agent字符串等 (伪装浏览器)。
  • urllib2模块比较优势的地方是urllib2.urlopen可以接受Request对象作为参数, 从而可以控制HTTP Request的header部。
  • 但是urllib.urlretrieve函数以及urllib.quote等一系列quote和unquote功能没有 被加入urllib2中,因此有时也需要urllib的辅助

3. Requests模块使用

3.1 Requests模块介绍

Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。

  • 安装:
conda install requests 

或者

pip install requests

3.2 Requests模块常见API使用

  • 使用dir+help探索Requests模块
import requests
help(requests)

dir{requests}

help{requests.get}

help{requests.post}
  • 使用Requests发送http get请求
import requests
r = requesta.get('http://*******')
print r
print r.status_code
print r.reason
print r.cookies
print r。headers
print r.encoding
r.encoding = 'gb2312'#出现乱码则将encoding改为页面真正的字符编码集
print r.text
  • 使用Requests模块实现http post请求
import request

payload = {'key1':'value1','key2','value2'}
r = requests.post(http://httpbin.org/post',data=payload)
print r
print r.text

3.3 设置请求头信息模拟浏览器访问

import requests

headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) Gecko/20100101 Firefox/50"}

html = requests.get("http://www.tmall.com",headers=headers)
html.status_code
html.content
html.text

3.4 使用代理IP

import requests

headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"}
proxies = {'http':'122.72.32.73:80','https':'58.67.159.50:80'}
#requests模拟浏览器
response = requests.get("http://www.tmall.com",headers=headers,proxies=proxies)


print(response.status_code)
print(response.content)

4. Python三种网页内容抓取方法

4.1 介绍

  • 正则表达式:使用re模块,用正则表达式去匹配想要抓取的网页内容,性能比较 好,但是要求正则表达式掌握程序高
  • BeautifulSoup模块:纯Python编写,可以解析网页,并且提供定位内容的便捷 接口,性能不是很好,但是使用简单
  • lxml模块:C语言实现,性能较好,使用简单,但安装比较困难

4.2 BeautifulSoup4

from bs4 import BeautifulSoup as bs
html = '''
<!DOCTYPE html>
<html lang="zh-CN">
    <head>
        <title>html标签简介</title>
        <meta charset="utf-8" />
    </head>
    <div class="mydiv">
        <h1>网页标题</h1>
    </div>
</html>
'''
#解析数据
#find 获取匹配的第一个元素

soup = bs(html,'lxml')
print soup.prettify
div = soup('div',class_='inner-left f1')
print div.find('h1').text

猜你喜欢

转载自blog.csdn.net/qq_27171347/article/details/81074415
今日推荐