。。。

一. 基本介绍

什么是爬虫?
    - 就是抓取网页数据的程序

怎么抓取网页数据


网页三大特征:
    - 每个网页都有自己的URL (统一资源定位符) 来进行定位
    - 网页都是用HTML(超文本标记语言)来描述页面信息
    - 网页都使用HTTP/HTTPS(超文本传输协议)来传输HTML数据

爬虫的设计思路:
    -1. 首先确定需要爬取的网页URL地址
    -2. 通过HTTP/HTTPS协议来获取对应的HTML页面
    -3. 提取HTML页面里面有用的数据
        a. 如果是需要的数据,就保存起来。
        b. 如果是页面里的其它URL,那就继续执行第二步。

为什么选择Python做爬虫?
    - PHP   对多线程 异步支持不够好 并发处理很弱
    - Java  Python爬虫的最大对手,但是Java语言本身很笨重,代码量很大,重构成本比较高
    - C/C++ 运行效率几乎最强,但是学习成本很高,代码成型比较慢
    - Python 语言优美,代码简洁,开发效率高,支持的模块多,相关的HTTP请求模块和
             还有强大的爬虫Scrapy 以及成熟高效的scrapy-redis分布式策略
             而且 调用其他接口也非常方便(胶水语言)
View Code

a. 反爬虫 设置多个浏览器

import urllib.request
import random

user_list = [
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv2.0.1) Gecko/20100101 Firefox/4.0.1",
        "Mozilla/5.0 (Windows NT 6.1; rv2.0.1) Gecko/20100101 Firefox/4.0.1",
        "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11",
        "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11",
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"
]

# 在User-Agent列表里随机选择一个User-Agent
user_agent = random.choice(user_list)

# 通过urllib.request.Request() 方法构造一个请求对象
request = urllib.request.Request("http://www.baidu.com/")

# add_header()方法 添加/修改 一个HTTP报头
request.add_header("User-Agent", user_agent)

# get_header() 获取一个已有的HTTP报头的值,注意只能是第一个字母大写,其他的必须小写
print(request.get_header("User-agent"))
View Code

b. 用户输入(url 解码) 百度查找

import urllib.request
from urllib import parse

url = "http://www.baidu.com/s"
headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv2.0.1) Gecko/20100101 Firefox/4.0.1"}

keyword = input("请输入你要查询的字符串: ")

wd = {"wd":keyword}
wd = parse.urlencode(wd)

# 拼接完整的url
fullurl = url + "?" + wd

# 构造请求对象
request = urllib.request.Request(fullurl,headers=headers)

# 发送请求
response = urllib.request.urlopen(request)

print(response.read())
View Code

c. Handler处理器 和自定义Opener

import urllib.request
from urllib import parse

# 构建一个HTTPHandler处理器对象,支持处理HTTP的请求
http_hander = urllib.request.HTTPHandler()

# 调用build_opener() 方法构建一个自定义的opener对象, 参数是构建的处理器对象
opener = urllib.request.build_opener(http_hander)

request = urllib.request.Request("http://www.baidu.com")
response = opener.open(request)
print(response.read())
View Code

 

原文地址:https://www.cnblogs.com/golangav/p/7436342.html