Spider_study заметки 01

рептилия

1. Знакомство с рептилиями

1.1 Что такое рептилия

Веб-сканеры (также известные как веб-пауки,Интернетробот, вFOAFcommunity, чаще именуемый веб-чейзером) — это система, автоматически сканирующая информацию из всемирной паутины по определенным правилам.программаилисценарий. Другими менее часто используемыми именами являются муравей, автоиндекс, эмулятор или червь.

1.2 Основной процесс сканирования

  1. Инициировать запрос: используйте библиотеку http, чтобы инициировать запрос к целевому сайту, то есть отправить запрос запроса, включая: заголовок запроса, тело запроса и т. д.
  2. Получите содержимое ответа: если сервер может нормально ответить, он получит ответ, содержащий: html, json, изображения, видео и т. д.
  3. Парсинг содержимого: Парсинг html-данных: регулярные выражения, сторонние библиотеки парсинга, такие как Beautifulsoup, pyquery и т. д. => Парсинг json-данных: json-модуль Парсинг бинарных данных: запись файлов в виде b
  4. Сохранить данные: база данных/файл

2. Процессор ProxyHandler (прокси):

  1. Принцип прокси: прежде чем запрашивать целевой сайт, сначала запросите прокси-сервер, а затем позвольте прокси-серверу запросить целевой веб-сайт.После того, как прокси-сервер получит данные целевого веб-сайта, он перенаправит их в наш код.

  2. httpbin.org: Этот веб-сайт может легко просматривать некоторые параметры http-запроса.

  3. Использовать прокси в коде:

    • использоватьurllib.request.ProxyHandler, передать прокси, прокси - это словарь, ключ словаря зависит от типа, который может получить прокси-сервер, обычно этоhttpилиhttps, значениеip:port.
    • Используйте созданный на предыдущем шагеhandler,а такжеrequest.build_openerСоздаватьopenerобъект.
    • Используйте созданный на предыдущем шагеopener,перечислитьopenФункция для инициирования запроса. Пример кода выглядит следующим образом:
 from urllib import request
 url = 'http://httpbin.org/ip'
 # 1. 使用ProxyHandler,传入代理构建一个handler
 handler = request.ProxyHandler({"http":"223.241.78.43:8010"})
 # 2. 使用上面创建的handler构建一个opener
 opener = request.build_opener(handler)
 # 3. 使用opener去发送一个请求
 resp = opener.open(url)
 print(resp.read())

3. запросы

Отправить запрос на получение:

Отправьте запрос на получение, позвоните напрямуюrequests.getВот и все. Какой запрос вы хотите отправить, вы можете вызвать любой метод.

 response = requests.get("https://www.baidu.com/")
Некоторые свойства ответа:
 import requests
 ​
 kw = {'wd':'中国'}
 ​
 headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
 ​
 # params 接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()
 response = requests.get("http://www.baidu.com/s", params = kw, headers = headers)
 ​
 # 查看响应内容,response.text 返回的是Unicode格式的数据
 print(response.text)
 ​
 # 查看响应内容,response.content返回的字节流数据
 print(response.content)
 ​
 # 查看完整url地址
 print(response.url)
 ​
 # 查看响应头部字符编码
 print(response.encoding)
 ​
 # 查看响应码
 print(response.status_code)
Разница между response.text и response.content:
  1. response.content: это данные, полученные непосредственно из сети. без всякой расшифровки. Итак, это байтовый тип. На самом деле все строки, передаваемые на жесткий диск и в сеть, состоят из байтов.
  2. response.text: это тип данных str, представляющий собой строку, которую декодирует библиотека запросов response.content. Для декодирования необходимо указать метод кодирования, и запросы будут оценивать метод кодирования на основе собственных предположений. Так что иногда могут быть неправильные предположения, которые приведут к искажению символов при декодировании. следует использоватьresponse.content.decode('utf-8')Сделайте ручное декодирование.
Отправить запрос на публикацию:

Отправить почтовый запрос очень просто. позвонить напрямуюrequests.postметод подойдет. Если он возвращает данные json. тогда вы можете позвонитьresponse.json()для преобразования строки json в словарь или список.

Используйте прокси:

В методе запроса передатьproxiesпараметры в порядке.

Обработка файлов cookie:

Если вы хотите поделиться файлами cookie по нескольким запросам. Затем следует использовать сеанс. Пример кода выглядит следующим образом:

 import requests
 url = "http://www.renren.com/PLogin.do"
 data = {"email":"970138074@qq.com",'password':"pythonspider"}
 headers = {
     'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"
 }
 ​
 session = requests.Session()
 ​
 session.post(url,data=data,headers=headers)
 ​
 response = session.get('http://www.renren.com/880151247/profile')
 with open('renren.html','w',encoding='utf-8') as fp:
     fp.write(response.text)