2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Verkkoindeksointirobotti on ohjelma, jota käytetään verkkosisällön automaattiseen noutamiseen. Se simuloi käyttäjien Web-sivujen selaamista, hankkii verkkosivujen lähdekoodin lähettämällä HTTP-pyyntöjä ja käyttää jäsennys- ja purkutekniikkaa tarvittavien tietojen hankkimiseen.
Indeksointirobotti lähettää HTTP-pyynnön kohdesivustolle. Pyyntö sisältää URL-osoitteen, pyyntömenetelmän (kuten GET tai POST), pyyntöotsikot (Headers) jne. Kun palvelin on vastaanottanut pyynnön, se palauttaa HTTP-vastauksen, joka sisältää tilakoodin, vastauksen otsikon ja vastauksen rungon (verkkosivun sisällön).
requests
jaaiohttp
, jota käytetään HTTP-pyyntöjen lähettämiseen.BeautifulSoup
、lxml
jaPyQuery
, jota käytetään verkkosivun sisällön jäsentämiseen.pandas
jaSQLite
, jota käytetään indeksoitujen tietojen tallentamiseen.asyncio
jaaiohttp
, jota käytetään asynkronisten indeksointirobottien toteuttamiseen ja indeksoinnin tehokkuuden parantamiseen.Seuraavaksi käytämme 7 pientä Python-indeksointirobotin tapausta auttaaksemme sinua oppimaan ja ymmärtämään Python-indeksointirobottien perustiedot. Seuraava on johdanto ja lähdekoodi jokaiselle tapaukselle:
Tämä tapaus käyttääBeautifulSoup
Kirjasto indeksoi 250 suosituimman Douban-elokuvan tiedot, kuten elokuvien nimet, luokitukset ja arvioijien lukumäärän, ja tallentaa nämä tiedot CSV-tiedostoon.
- 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):
-