Как новичок в Python + краулер, сегодня мне нужно выполнить кое-какую работу с краулером, чего я никогда раньше не делал, поэтому я начну с нуля.
В системе win10 я не помню, когда на моем компе до этого был установлен python.Версия 3.6 была установлена и ею можно пользоваться. Инструменты кода, сначала используйте код VS.
Сначала сделайте простую демонстрацию обхода веб-страниц.
Python3 предоставляетurllibНа эту стандартную библиотеку можно ссылаться и использовать без установки:
from urllib import request
Затем мы можем использовать urllib для отправки запросов GET. код показывает, как показано ниже:
from urllib import request
req_news = request.Request('https://news.163.com/20/0522/13/FD82KGA1000189FH.html')
req_news.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36')
html_news = request.urlopen(req_news).read()
print('------------')
print(html_news.decode('gbk'))
User-Agent по-китайски называется User Agent или сокращенно UA.Это специальный строковый заголовок, который позволяет серверу идентифицировать операционную систему и ее версию, тип процессора, браузер и версию, механизм рендеринга браузера, язык браузера, подключаемый модуль браузера. инсы и т.д. Это добавлено в заголовок запроса здесь, чтобы имитировать обычный запрос браузера.Многие серверы будут выполнять обнаружение, и если обнаружится, что запрос не является обычным браузером, он будет отклонен напрямую (многие веб-сайты могут не иметь этого своего рода обнаружение, но это самая основная стратегия антисканирования.), конечно, в заголовке запроса, отправляемом настоящим браузером, присутствует более одного UA. Скриншот в браузере.
Уведомление:
request.urlopen(req_news).read()Считываемое содержимое иногда представляет собой двоичные (байты) данные, которые необходимо преобразовать, и китайский язык необходимо использоватьdecodeПреобразование в формат GBK, возможность записи в формате UTF-8 при записи.
Иногда то, что считывается, является строкой напрямую, вы можете использоватьencodingПреобразовать в утф-8
Почему формат GBK? Почему не UTF-8 или что-то еще?
Давайте F12, чтобы проверить код веб-страницы, вhtml/head/metaЭтикетка на первом местеcharsetАтрибут, определяющий кодировку веб-страницы. Можем взять его за основу транскодирования.
Примечание: Кодировка формата по умолчанию — gbk.Если извлеченная кодировка пуста, установите ее в формат gbk.
from urllib import request
req_news = request.Request('https://news.163.com/20/0522/13/FD82KGA1000189FH.html')
req_news.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36')
html_news = request.urlopen(req_news).read()
if len(char_set) == 0:
char_set = ['gbk']
html_news = html_news.decode(char_set[0])
print('------------')
print(html_news)
Затем запишите прочитанную информацию о странице в файл. Python должен сначала представить os для чтения и записи файлов.
import os
Читающая и пишущая стороны меньше ненавидят, а C более похожи. Для чтения и записи файлов Python см.:Woohoo. Мой 3school.com. талант/Python/друзья после прослушивания…
base_dir = os.getcwd()
#获取当前文件夹的绝对路径
file_name = os.path.join(base_dir, 'data', 'news.html')
#打开fie_name路径下的news.html文件,采用写入模式
#若文件不存在,创建,若存在,清空并写入
my_open = open(file_name, 'w', encoding="utf-8")
#在文件中写入内容
my_open.write(html_news.decode('gbk'))
my_open.close()
Полный код чтения и записи выглядит следующим образом:
from urllib import request
# from lxml import etree
# import re
import os
req_news = request.Request('https://news.163.com/20/0522/13/FD82KGA1000189FH.html')
req_news.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36')
html_news = request.urlopen(req_news).read().decode('gbk')
print('------------')
print(html_news)
base_dir = os.getcwd()
#获取当前文件夹的绝对路径
file_name = os.path.join(base_dir, 'data', 'news.html')
# print(file_name)
#打开fie_name路径下的news.html文件,采用写入模式
#若文件不存在,创建,若存在,清空并写入
my_open = open(file_name, 'w', encoding="utf-8")
#在文件中写入内容
my_open.write(html_news)
my_open.close()
Это только первый шаг сканера, далее вам нужно проанализировать данные веб-страницы и извлечь нужный контент.