2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Веб-сканер — это программа, используемая для автоматического получения веб-контента. Он имитирует процесс просмотра пользователями веб-страниц, получает исходный код веб-страниц путем отправки HTTP-запросов и использует технологию синтаксического анализа и извлечения для получения необходимых данных.
Сканер отправляет HTTP-запрос на целевой веб-сайт. Запрос включает URL-адрес, метод запроса (например, GET или POST), заголовки запроса (заголовки) и т. д. После того, как сервер получит запрос, он вернет HTTP-ответ, который содержит код состояния, заголовок ответа и тело ответа (содержимое веб-страницы).
requests
иaiohttp
, используемый для отправки HTTP-запросов.BeautifulSoup
、lxml
иPyQuery
, используемый для анализа содержимого веб-страницы.pandas
иSQLite
, используемый для хранения просканированных данных.asyncio
иaiohttp
, используемый для реализации асинхронных сканеров и повышения эффективности сканирования.Далее мы будем использовать 7 небольших примеров сканеров Python, чтобы помочь вам лучше изучить и понять базовые знания о сканерах Python. Ниже приводится введение и исходный код для каждого случая:
В этом случае используетсяBeautifulSoup
Библиотека сканирует такую информацию, как названия фильмов, рейтинги и количество рецензентов из 250 лучших фильмов Дубана, и сохраняет эту информацию в файл CSV.
- import requests
- from bs4 import BeautifulSoup
- import csv
-
- # 请求URL
- url = 'https://movie.douban.com/top250'
- # 请求头部
- headers = {
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
- }
-
- # 解析页面函数
- def parse_html(html):
- soup = BeautifulSoup(html, 'lxml')
- movie_list = soup.find('ol', class_='grid_view').find_all('li')
- for movie in movie_list:
- title = movie.find('div', class_='hd').find('span', class_='title').get_text()
- rating_num = movie.find('div', class_='star').find('span', class_='rating_num').get_text()
- comment_num = movie.find('div', class_='star').find_all('span')[-1].get_text()
- writer.writerow([title, rating_num, comment_num])
-
- # 保存数据函数
- def save_data():
- f = open('douban_movie_top250.csv', 'a', newline='', encoding='utf-8-sig')
- global writer
- writer = csv.writer(f)
- writer.writerow(['电影名称', '评分', '评价人数'])
- for i in range(10):
-