Сбор данных фильма «Кошачий глаз» (теория)

Python

предисловие

Эта статья может быть длинной, но она абсолютно полна галантереи и предоставляет множество обучающих ресурсов и способов. Достижение цели позволить читателям самостоятельно писать базовые поисковые роботы также является основной целью данной статьи.Вывести ценные знания, которые действительно могут помочь читателям.То есть лучше научить человека ловить рыбу, чем дать ему рыбу. Давайте начнем немедленно Эта статья содержит следующее содержание:
  • Создание среды Python и базовые знания
  • Обзор принципа рептилий
  • Обзор краулерной технологии
  • Сбор данных о рейтинге фильмов «Кошачий глаз»
  • Данные Ajax сканируют кассовые сборы фильма «Маоянь»
  • Более продвинутые, прокси, имитация входа в систему, сканирование приложений и т. д.

Создание среды Python и базовые знания

Создание среды Python

Инсталляция Анаконды

Автор не будет здесь рассказывать об установке программного обеспечения Python.Некоторые читатели могут спросить, что, если Python не установлен, как я могу получить дополнительные знания Python? Не волнуйтесь, здесь автор представляет новый метод быстрой установки Python, то есть установку Anaconda напрямую.Что такое Anaconda? Anaconda — это дистрибутив Python, включающий Python и многие распространенные библиотеки Python, а также диспетчер пакетов cond. Anaconda — это дистрибутив Python, ориентированный на анализ данных, включая более 720 научных пакетов, таких как conda, Python и их зависимости. Item, инструмент Python для анализ больших данных на уровне предприятия. Он участвует во многих аспектах, таких как визуализация данных, машинное обучение и глубокое обучение. Он может не только анализировать данные, но и использоваться в области больших данных и искусственного интеллекта. Некоторые читатели могут задаться вопросом, какое это имеет отношение к поисковым роботам. Конечно, имеет. В процессе написания программ поисковых роботов вам необходимо использовать библиотеки Python, и Anaconda уже включает эти часто используемые библиотеки, что отлично подходит для читателей, которые имеют головная боль при установке библиотек Python. Разумеется, все это бесплатно, так что приступим к установке замечательной Анаконды. Сначала загрузите соответствующую версию с официального сайта Anaconda.Anaconda, если скорость загрузки слишком низкая, рекомендуется использовать внутреннюю зеркальную станцию ​​с открытым исходным кодом Университета Цинхуа, чтобы выбрать соответствующуюAnacondaСкачать, страница загрузки официального сайта Anaconda показана ниже:


В этой статье рекомендуется загружать версию, соответствующую Python 3.6.В качестве примера для автора компьютерная среда: Windows-64Bit, а соответствующая загруженная версия: Anaconda3-5.2.0-Windows-x86_64.После завершения загрузки откройте установочный пакет, как показано ниже:

Нажмите "Далее
Нажмите Я согласен
Выберите «Только я» и нажмите «Далее».
Выберите каталог установки и нажмите «Далее».
Установите флажок «Добавить Anaconda в переменную среды PATH» и нажмите «Установить», чтобы установить

Построение среды IDE

Автор IDE рекомендует использовать Pycharm, среди которых бесплатныйИздание сообществаОн смог удовлетворить наши потребности, и руководство можно найти в блоге CSDN.Учебник по простому использованию Pycharmили ищите прямо на CSDNучебник по pycharmПолучите больше знаний. Подробно можно описать здесь

1.1 Базовая технология Python

Я не буду вводить слишком базовый контент, потому что в Интернете уже есть много бесплатных базовых вводных руководств, но автор предоставит вам некоторые бесплатные учебные ресурсы и методы в Интернете, чтобы вы могли быстро освоить базовые знания Для написания программ краулеров требуется Python.И продвинутые знания, и для базового краулера нам необходимо освоить следующие знания Python:
  • тип данных
  • список
  • оператор цикла
  • Судить приговоры
  • функция

Основы Python

Для читателей, у которых вообще нет основы Python, вы можете изучить следующее краткое руководство.
Официальная документация Python является абсолютно авторитетной и всеобъемлющей, но сама документация на английском языке, поэтому она не очень дружелюбна для большинства новичков.Ниже приведена версия Python, переведенная китайцами.Читатели, которые плохо разбираются в английском языке, могут выбрать эту версию для учиться:
  • Руководство по началу работы с Python | документация по Python 3.6.3Некоторые рекомендуемые книги для поступления
  • «Программирование на Python от начала до практики»
  • «Учебник по основам Python (3-е издание)» Расширенный Python Для читателей, которые хотят улучшить свои навыки, следующие книги и материалы должны удовлетворить ваш аппетит:
  • «Жидкий питон»
  • «Руководство по обучению Python (4-е издание)»
  • «Программирование ядра Python (3-е издание)»
  • «Описание языка Python структуры данных»
  • «Высокопроизводительное программирование на Python»

что такое рептилия

Принцип рептилий

Что такое рептилия? Рептилии по сути имитируютHTTPПросьба, запомните это предложение, это то, что нам часто нужно сделать позже. Есть два способа для обычных пользователей получить сетевые данные: А. Браузер отправляет HTTP-запрос ---> загружает код веб-страницы ---> анализирует его на странице. Б. Имитация браузера для отправки запроса (получение кода веб-страницы) -> извлечение полезных данных -> сохранение их в базе данных или файле. Рептилия занимается вторым делом, и общий процесс выглядит следующим образом: i. Инициировать запрос к целевому сайту через библиотеку HTTP, то есть отправить Запрос, запрос может содержать дополнительные заголовки и другую информацию, и дождаться ответа сервера ii. Если сервер отвечает нормально, он получит ответ. Содержимое ответа — это содержимое страницы, которую нужно получить. Типы могут быть HTML, JSON, двоичные файлы (такие как изображения, видео и т. д.). III. Полученный содержание может быть HTML, который может быть проанализирован с помощью регулярных выражений и библиотек синтаксического анализа веб-страниц. Это может быть JSON, который может быть непосредственно преобразован в объект JOSN для синтаксического анализа, или двоичные данные, которые могут быть сохранены или дополнительно обработано IV. Это могут быть сохранены в различных формах, которые могут быть сохранены в виде текста, сохраненных в базе данных, или сохранить в виде файла в формате конкретного. Многие читатели могут не знать, что выше делают. Далее, мы будем анализировать вышеописанный процесс с помощью захвата пакетов браузера. Автор рекомендует использовать Chrome, который очень дружественный к разработчикам. Мы будем использовать его часто в будущем.ChromeСкачать, если скорость загрузки низкая, рекомендуется использовать внутреннийChromeСкачать и установить зеркало. Сначала откройте браузер и введите https://www.baidu.com/ в адресную строку (читатели также могут использовать другие веб-страницы для тестирования, такие как наша https://gitbook.cn/), нажмите Enter, страница Baidu откроется. , а затем нажмите F12, горячую клавишу параметров разработчика браузера, выберите столбец «Сеть» и откройте интерфейс, как показано на следующем рисунке:
Нажмите F5, чтобы обновить страницу:
В колонке обновляется большое количество пакетов данных, эти пакеты являются данными, запрошенными браузером, и данные, которые мы хотим, находятся в этих запросах
  • Имя первого столбца: имя запроса, обычно в качестве имени используется последняя часть URL-адреса.
  • Статус второго столбца: код состояния ответа, который отображается здесь как 200, что означает, что ответ нормальный. По коду состояния мы можем судить, получили ли мы нормальный ответ после отправки запроса.
  • Третий столбец Тип: Запрошенный тип документа. Вот документ, что означает, что на этот раз мы запрашиваем HTML-документ, а его содержимое — некоторый HTML-код.
  • Инициатор четвертого столбца: источник запроса. Используется для обозначения того, какой объект или процесс инициировал запрос.
  • Пятая колонка Размер: Размер загружаемого с сервера файла и запрашиваемого ресурса. Если ресурс получен из кеша, столбец будет отображаться из кеша.
  • Шестой столбец «Время»: общее время, прошедшее от инициирования запроса до получения ответа.
  • Седьмая колонка Водопад: Визуальный водопад потоков сетевых запросов. Далее мы анализируем подробный состав запроса, например, первый запрос — это запрос, имя которого — www.baidu.com, как показано на следующем рисунке:
Мы видим, что ответ разбит на общую часть, заголовок запроса, заголовок ответа
Общее обычно состоит из следующих частей:
  • URL-адрес запроса — это запрошенный URL-адрес.
  • Метод запроса - это метод запроса
  • Код состояния — это код состояния ответа,
  • Удаленный адрес — это адрес и порт удаленного сервера.
Заголовки ответов обычно содержат следующие части (ответ (сервер -> клиент [ответ])):
  • Протокол и номер версии, используемые HTTP/1.1 для ответа 200 (код состояния) OK (описание)
  • Расположение — это путь к странице, к которой сервер должен получить доступ от клиента.
  • Сервер — это имя веб-сервера сервера
  • Content-Encoding — это тип кодировки сжатия, который сервер может отправлять
  • Content-Length — это длина сжатых данных, отправляемых сервером.
  • Content-Language — это тип языка, отправляемый сервером.
  • Content-Type — это тип, отправляемый сервером, и используемый метод кодирования.
  • Last-Modified — время последней модификации ресурса сервером.
  • Обновить сервер требует, чтобы клиент обновился через 1 секунду, а затем получил доступ к указанному пути к странице.
  • Content-Disposition означает, что сервер требует, чтобы клиент открыл файл, загрузив файл.
  • Transfer-Encoding передает данные клиенту порциями.
  • Set-Cookie — это временные данные, отправляемые сервером клиенту.
  • Соединение должно поддерживать отношения соединения между клиентом и сервером.
Заголовки запроса обычно содержат следующие части (запрос (клиент -> сервер [запрос])):
  • GET (метод запроса) /newcoder/hello.html (запрошенный целевой ресурс) HTTP/1.1 (запрошенный протокол и номер версии)
  • Accept — это тип ресурса, который может получить клиент.
  • Accept-Language — это тип языка, полученный клиентом.
  • Соединение должно поддерживать отношения соединения между клиентом и сервером.
  • Хост: localhost — это целевой хост и номер порта соединения.
  • Referer сообщает серверу, откуда я
  • User-Agent — это название номера версии клиента
  • Accept-Encoding — это тип сжатых данных, которые может получить клиент.
  • If-Modified-Since — время кэширования
  • Cookie временно хранит информацию на стороне сервера для клиента
  • Дата — это время, когда клиент запрашивает сервер Что нам нужно сделать, так это смоделировать браузер для отправки заголовков запросов, чтобы получить информацию об ответе сервера, чтобы получить нужные нам данные.Для читателей, которые хотят узнать больше, посетитеHTTP | MDNДокументация для получения дополнительной информации.

Какие данные могут собирать сканеры?

Мы можем видеть различную информацию на веб-странице, наиболее распространенной является веб-страница, которую может видеть пользователь, и когда мы фиксируем запрос веб-страницы с помощью инструментов разработчика браузера, мы видим большое количество запросов, то есть , некоторые возвращаемые веб-страницы не являются HTML-кодом, но могут быть строкой json, различными вторичными данными, такими как изображения, аудио, видео и т. д., конечно, некоторые файлы представляют собой CSS, JavaScript и другие файлы. Затем данные, которые может получить браузер, могут быть получены программой-сканером, а данные браузера — это информация, которая транслируется пользователю, то есть до тех пор, пока информация доступна в браузере, сканер программа может его зафиксировать.

Обзор краулерной технологии

^_^: В этом разделе представлены технологии, часто используемые поисковыми роботами, такие как запрос: запросы, извлечение информации: Xpath, Re Regular, json, хранилище: CSV, MySQL, MongoDB, имитация браузера Selenium, чтобы убедиться, что технические читатели, участвующие в реальном проекте сможет, то есть необходимо четко объяснить, как пользоваться этими технологиями.

первый запрос

Библиотека запросов

Официальный документ описывает библиотеку Requests следующим образом: Requests — это единственная HTTP-библиотека Python, не содержащая ГМО, которой люди могут безопасно пользоваться. Предупреждение. Непрофессиональное использование других HTTP-библиотек может привести к опасным побочным эффектам, в том числе: ошибкам безопасности, избыточному коду, изобретению велосипеда, документам, депрессии, головным болям и даже смерти. ЗапросыPEP 20(то есть знаменитый Zen of Python) разработан вокруг девиза. Ниже приводится философия разработки запросов. Я надеюсь, что читатели смогут внимательно прочитать ее и написать больше Pythonic-кода.
Красивое лучше некрасивого. Явное лучше неявного. Простое лучше сложного. Комплекс лучше сложного. Удобочитаемость имеет значение (читабельность важна).
В версии 2.1 мы говорили о принципе работы сканера, который заключается в том, чтобы сделать HTTP-запрос и получить ответ, извлечь из ответа нужную нам информацию и сохранить ее. Библиотека Requests — это инструмент, использующий Python для имитации HTTP-запросов. Если читатель установил Anaconda, библиотека запросов уже доступна, если библиотеки запросов нет, читатель может установить библиотеку запросов в командной строке (win+R input cmd) pip install request, а затем запустить нашу первую панель запросов ! Отправлять HTTP-запросы с помощью Requests очень просто.Дальше возьмем в качестве примера GitChat:
# 导入requests 模块
import requests
# 发起Get请求并返回Response对象,包含服务器对HTTP请求的响应
response = requests.get('https://gitbook.cn/')
# 打印 响应状态码
print(response.status_code)
# 打印 str类型的响应体,比如一个普通的 HTML 页面,需要对文本进一步分析时,使用 text
print(response.text)

Результат частичной операции показан на следующем рисунке:
Запросы поддерживают не только запросы Get, такие как запросы Post:
# 导入 requests 模块
import requests
# 需要提交的表单数据
data = {
    'name': 'ruo', 'age': 22
}
# 发起Post请求
response = requests.post("http://httpbin.org/post", data=data)
# 响应体内容
print(response.text)

Результат частичной операции показан на следующем рисунке:

Конечно, запросы также поддерживают больше методов запроса, таких как следующие запросы, автор не будет демонстрировать их по одному, наиболее часто используемые запросы — это два вышеуказанных метода запроса: Get и Post.
# PUT请求
requests.put(“http://httpbin.org/put”) 
# DELETE请求
requests.delete(“http://httpbin.org/delete”)
# HEAD请求
requests.head(“http://httpbin.org/get”) 
# OPTIONS请求
requests.options(“http://httpbin.org/get”) 

Поскольку большинство серверов идентифицируют операционную систему и версию, браузер и версию, используемую клиентом, через User-Agent в заголовке запроса, краулер также должен добавить эту информацию, чтобы замаскировать браузер; если нет, очень вероятно, что это не распознается краулером, например, когда мы делаем запрос на получение к Zhihu без заголовков:
# 导入 requests 模块
import requests
# 发起Get请求
response = requests.get("https://www.zhihu.com")
# 状态码
print(response.status_code)
# 响应体内容
print(r.text)

Возвращаемое содержимое показано на следующем рисунке:

Мы видим возвращенный код состояния 400, и запрос недействителен, затем мы добавляем заголовки к запросу, затем добавляем информацию об агенте пользователя и повторяем запрос:
# 导入 requests 模块
import requests
# 在Headers中添加User-Agent字段信息
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
# 发起Get请求
response = requests.get("https://www.zhihu.com", headers=headers)
# 状态码
print(response.status_code)
# 响应体内容
print(response.text)

Возвращаемое содержимое показано на следующем рисунке:

Вы можете видеть, что запрос был выполнен успешно, и были возвращены правильный код состояния ответа и тело ответа. Читатели, которые хотят узнать больше о Requests, могут посетить официальный сайт Requests.оригинальный документиликитайский документ.

В ПОРЯДКЕ

После того, как мы получим ответ через HTTP-запрос, нам нужно извлечь содержимое из тела ответа.Здесь автор вводит два распространенных метода извлечения: один — регулярное выражение, а другой — Xpath.

регулярное выражение

Регулярные выражения — это очень мощный инструмент обработки строк. Почти любую операцию со строками можно выполнить с помощью регулярных выражений. Для поискового робота, работающего со строками каждый день, регулярные выражения еще более необходимы. С его помощью очень удобно извлекать нужную информацию из HTML. Читатели могутРегулярные выражения | Официальный сайт Ляо СюэфэнаНачните быстро или черезРегулярные выражения Python | Учебник для начинающихНаучитесь работать с обычными и использовать обычные в Python, стандартной библиотеке Python в официальной документации Python.Раздел 6.2Существует также подробное введение и руководство по использованию Re. Читатели, впервые знакомящиеся с регулярными выражениями, могут найти их немного абстрактными и трудными для начала, потому что, в конце концов, регулярные выражения сами по себе представляют собой небольшой узкоспециализированный язык программирования.После понимания приведенных выше вводных руководств, вот введение. для извлечения информации Общая обычная строка .*?, это правило может соответствовать любому символу нежадным образом, мы будем часто использовать его позже. Например, нам нужно сопоставить содержимое тега

Chapter 1 — Introduce Regular Expression

, мы можем:
# 导入 re 模块
import re
# 待匹配文本
h1 = '<H1>Chapter 3.2.1 - 介绍正则表达式</H1>'
# 将正则字符串编译成正则表达式对象,方便在后面的匹配中复用
pat = re.compile('<H1>(.*?)</H1>', re.S)
# re.search 扫描整个字符串并返回第一个成功的匹配
result = re.search(pat, h1)
# 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
print(result.group(0))
# 匹配的第一个括号内的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
print(result.group(1))

Вот результаты совпадений:

Xpath

XPath — это язык пути XML, который используется для определения местоположения определенной части XML-документа. XPath основан на древовидной структуре XML, которая обеспечивает возможность поиска узлов в дереве структуры данных. Первоначальное намерение XPath состояло в том, чтобы использовать его в качестве общей синтаксической модели между XPointer и XSL. Но XPath был быстро принят разработчиками в качестве небольшого языка запросов, а также является хорошим помощником для извлечения информации в поисковых роботах. Читатели могутУчебник по Xpath | Учебник для новичковИзучите принцип и метод написания Xpath, вы также можете посетить блог CSDN для поискаPython XpathУзнайте больше об основных операциях Xpath в Python, а затем познакомьтесь с навыками написания «письмо» и методами, используемыми в Python.Причину, по которой добавлено «письмо», читатель узнает ниже. Помните инструмент разработчика браузера, используемый в принципе сканера 2.1, мы можем напрямую получить правила Xpath соответствующего узла с помощью этого инструмента, чтобы достичь цели быстрого извлечения информации веб-страницы с помощью Xpath, например, извлечение кошачьего глаза киносписок ТОП100Информация о фильме в , сначала откройте браузер и введите http://maoyan.com/board/4, наведите указатель мыши на информацию (название фильма), которую нужно извлечь, щелкните правой кнопкой мыши и выберите «Проверить», как показано на следующем рисунке. :

Затем мы выбираем следующие элементы, щелкаем правой кнопкой мыши и выбираем Copy-->xpath, как показано на следующем рисунке:

Теперь, когда получено правило xpath для узла, давайте напишем программу на Python, чтобы проверить, действительно ли правило может извлекать имя фильма:
import requests
# 导入lxml库的etree模块
from lxml import etree
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
url = 'http://maoyan.com/board/4'
response = requests.get(url, headers=headers)
html = response.text
# 调用HTML类进行初始化
html = etree.HTML(html)
# 粘贴我们copy的xpath,提取电影名 “霸王别姬”
result_bawangbieji = html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd[1]/div/div/div[1]/p[1]/a')
# 打印节点标签包含的文本内容
print(result_bawangbieji[0].text)
# 提取该页面所有电影名,即选择所有'dd'标签的电影名
result_all = html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[1]/a')
# 打印所有提取出的电影名
print('该页面全部电影名:')
for one in result_all:
    print(one.text)

Результат показан на следующем рисунке, мы успешно извлекли информацию о названии фильма в HTML:

хранить информацию

ТЕКСТОВОЕ хранение текста

Если читатели изучили базовые знания Python, они должны быть знакомы с этим основным методом хранения информации, то есть напрямую записывать информацию, которую нам нужно хранить, в файлы, такие как обычные файлы TEXT, если незнакомые читатели могут пройти мимо.Чтение и запись файлов Python — Python Tutorial™Для краткого обзора давайте выполним операции хранения файлов с именами фильмов, извлеченными Xpath в версии 3.2.2:
import requests
from lxml import etree
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
url = 'http://maoyan.com/board/4'
response = requests.get(url, headers=headers)
html = response.text
# 调用HTML类进行初始化
html = etree.HTML(html)
# 粘贴我们copy的xpath,提取电影名 “霸王别姬”
result_bawangbieji = html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd[1]/div/div/div[1]/p[1]/a')
# 打印节点标签包含的文本内容
print(result_bawangbieji[0].text)
# 提取该页面所有电影名
result_all = html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[1]/a')
# 打印所有提取出的电影名
print('该页面全部电影名:')
for one in result_all:
    print(one.text)
# 将这一页电影名存储至TEXT文件中,'a' 指打开一个文件进行追加。 如果文件存在,则文件指针位于文件末尾。也就是说,文件处于追加模式。如果文件不存在,它将创建一个新文件进行写入。
with open('film_name.text', 'a') as f:
    for one in result_all:
        f.write(one + '\n')

Результат сохранения показан на следующем рисунке:


CSV-хранилище

Файл CSV представляет собой значение, разделенное запятыми (также называемое значением, разделенным символами, поскольку разделитель может не быть запятой), который является распространенным текстовым форматом, в котором табличные данные хранятся в виде обычного текста, включая числа или символы. В Python есть встроенный модуль для работы с файлами CSV, а операция хранения CSV может быть выполнена только путем импорта.Далее мы сохраним имя фильма, извлеченное Xpath в 3.2.2 для операции хранения файлов CSV:
import requests
from lxml import etree
# 导入CSV模块
import csv

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
url = 'http://maoyan.com/board/4'

response = requests.get(url, headers=headers)
html = response.text
html = etree.HTML(html)
result_bawangbieji = html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd[1]/div/div/div[1]/p[1]/a')
print(result_bawangbieji[0].text)
result_all = html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[1]/a')
print('该页面全部电影名:')
for one in result_all:
    print(one.text)
# 将这一页电影名存储至CSV文件中:
with open('film_name.csv', 'a', newline='') as f:
    csv_file = csv.writer(f)
    for one in result_all:
        csv_file.writerow([one.text])

Результат хранения CSV-файла показан на следующем рисунке:

хранилище MySQL

MySQL — самая популярная система управления реляционными базами данных.Если у читателя не установлена ​​MySQL, вы можете использоватьphpstudy 2018 скачатьСкачайте phpstudy для быстрой установки MySQL В Python2 большинство библиотек, подключающих MySQL, используют MySQLdb, но эта библиотека официально не поддерживает Python3, поэтому рекомендуемой библиотекой здесь является PyMySQL.Работа с базой данных Python+MySQL (PyMySQL) | Python Tutorial™Изучите соответствующие методы и примеры PyMYSQL, работающего с MySQL. Далее мы попытаемся сохранить название фильма, извлеченное Xpath в версии 3.2.2, в MySQL. Читатели, у которых нет этого модуля, могут установить библиотеку pymysql с помощью (win+R input cmd ) pip установить pymysql.
import requests
from lxml import etree
# 导入pymysql模块
import pymysql

# 打开一个数据库连接
db = pymysql.connect(host='localhost', user='root', password='root', port=3306, db='spider', use_unicode=True, charset="utf8")
# 获取MySQL的操作游标,利用游标来执行SQL语句
cursor = db.cursor()

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
url = 'http://maoyan.com/board/4'

response = requests.get(url, headers=headers)
html = response.text
html = etree.HTML(html)
result_bawangbieji = html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd[1]/div/div/div[1]/p[1]/a')
print(result_bawangbieji[0].text)
result_all = html.xpath('//*[@id="app"]/div/div/div[1]/dl/dd/div/div/div[1]/p[1]/a')
print('该页面全部电影名:')
for one in result_all:
    print(one.text)

    try:
        # 插入数据语句
        sql = 'INSERT INTO film_infor(film_name) values (%s)'
        cursor.execute(sql, (one.text))
        db.commit()

    except:
        db.rollback()

Результат хранения MySQL показан на следующем рисунке: