Recopilación de datos de la red del rastreador de aprendizaje de Python

Python da la impresión de que es muy conveniente rastrear páginas web. Esta productividad es proporcionada por los
dos módulos urllib y peticiones.

Urllib para la recolección de datos de la red.

urllib biblioteca de
documentos oficiales Dirección: https://docs.python.org/3/library/urllib.html
urllib biblioteca de Python es una biblioteca de solicitudes incorporadas HTTP, cada módulo contiene los siguientes contenidos:
(1) urllib.request: módulo de solicitud
(2 ) urllib.error: módulo de manipulación excepción
(3) urllib.parse: análisis de módulo
(4) urllib.robotparser: módulo de análisis de robots.txt

biblioteca urllib: urlopen
urlopen realiza solicitudes simples de sitios web y no admite funciones complejas como autenticación, cookies y otras funciones HTTP avanzadas.
Para admitir estas funciones, debe utilizar el objeto OpenerDirector devuelto por la función build_opener ().
python学习之爬虫网络数据采集
biblioteca urllib: User-Agent solicita sitios web después de disfrazarse.
Para evitar que el rastreador del programa rastree el sitio web en una parálisis del sitio web, necesitará llevar cierta información de encabezado de encabezado para
acceder. Podemos especificar la información del encabezado de solicitud a través del objeto urllib.request.Request
python学习之爬虫网络数据采集

Biblioteca de solicitudes para la recopilación de datos de red

requests库
requests官方网址: https://requests.readthedocs.io/en/master/
Requests is an elegant and simple HTTP library for Python, built for human
beings.
request方法汇总
python学习之爬虫网络数据采集
Response对象包含服务器返回的所有信息,也包含请求的Request信息。
python学习之爬虫网络数据采集
reqursts.py

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': 'fentiao',
            '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()

高级应用一: 添加 headers

有些网站访问时必须带有浏览器等信息,如果不传入headers就会报错。
headers = { 'User-Agent': useragent}
response = requests.get(url, headers=headers)
UserAgent是识别浏览器的一串字符串,相当于浏览器的身份证,在利用爬虫爬取网站数据时,
频繁更换UserAgent可以避免触发相应的反爬机制。fake-useragent对频繁更换UserAgent提供
了很好的支持,可谓防反扒利器。
user_agent = UserAgent().random

import requests
from fake_useragent import  UserAgent

def add_headers():
    # headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'}
    #UserAgent实质上是从网络获取所有的用户代理, 再通过random随机选取一个用户代理。
    #https://fake-useragent.herokuapp.com/browsers/0.1.11
    ua = UserAgent()
    #默认情况下, python爬虫的用户代理是python-requests/2.22.0。
    response = requests.get('http://127.0.0.1:5000', headers={'User-Agent': ua.random})
    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)
百度的关键词接口:
https://www.baidu.com/baidu?wd=xxx&tn=monline_4_dg
360的关键词接口:http://www.so.com/s?q=keyword
python学习之爬虫网络数据采集

import requests
from fake_useragent import UserAgent

ua = UserAgent()
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)

Supongo que te gusta

Origin blog.51cto.com/13810716/2486979
Recomendado
Clasificación