js實(shí)現(xiàn)網(wǎng)站浮動(dòng)窗口產(chǎn)品關(guān)鍵詞
網(wǎng)絡(luò)爬蟲(chóng)是一種自動(dòng)化程序,用于從網(wǎng)站抓取數(shù)據(jù)。Python 憑借其豐富的庫(kù)和簡(jiǎn)單的語(yǔ)法,是構(gòu)建網(wǎng)絡(luò)爬蟲(chóng)的理想語(yǔ)言。本文將帶你從零開(kāi)始學(xué)習(xí) Python 爬蟲(chóng)的基本知識(shí),并實(shí)現(xiàn)一個(gè)簡(jiǎn)單的爬蟲(chóng)項(xiàng)目。
1. 什么是網(wǎng)絡(luò)爬蟲(chóng)?
網(wǎng)絡(luò)爬蟲(chóng)(Web Crawler)是一種通過(guò)網(wǎng)絡(luò)協(xié)議(如 HTTP/HTTPS)獲取網(wǎng)頁(yè)內(nèi)容,并提取其中有用信息的程序。常見(jiàn)的爬蟲(chóng)用途包括:
- 收集商品價(jià)格和評(píng)價(jià)。
- 抓取新聞或博客內(nèi)容。
- 統(tǒng)計(jì)數(shù)據(jù)分析。
爬蟲(chóng)工作原理
- 發(fā)送 HTTP 請(qǐng)求到目標(biāo)網(wǎng)站。
- 獲取服務(wù)器返回的 HTML 頁(yè)面。
- 解析 HTML 內(nèi)容,提取所需數(shù)據(jù)。
- 保存數(shù)據(jù)以供后續(xù)使用。
2. 爬蟲(chóng)的基本工具
在 Python 中,我們可以使用以下工具和庫(kù)來(lái)構(gòu)建爬蟲(chóng):
2.1 requests
requests
是一個(gè)強(qiáng)大的 HTTP 庫(kù),用于發(fā)送網(wǎng)絡(luò)請(qǐng)求,獲取網(wǎng)頁(yè)內(nèi)容。
安裝:
pip install requests
示例:
import requests
url = "https://example.com"
response = requests.get(url)
print(response.text) # 打印網(wǎng)頁(yè)內(nèi)容
2.2 BeautifulSoup
BeautifulSoup
是一個(gè)解析 HTML 和 XML 的庫(kù),用于從網(wǎng)頁(yè)中提取數(shù)據(jù)。
安裝:
pip install beautifulsoup4
示例:
from bs4 import BeautifulSouphtml = "<html><body><h1>Hello, World!</h1></body></html>"
soup = BeautifulSoup(html, "html.parser")
print(soup.h1.text) # 輸出 "Hello, World!"
2.3 pandas
pandas
是一個(gè)用于數(shù)據(jù)處理和分析的庫(kù),適合將爬取的數(shù)據(jù)保存到 CSV 或 Excel。
安裝:
pip install pandas
示例:
import pandas as pddata = {"Title": ["Example"], "Link": ["https://example.com"]}
df = pd.DataFrame(data)
df.to_csv("output.csv", index=False)
3. 爬蟲(chóng)案例:抓取豆瓣電影排行榜
下面我們將構(gòu)建一個(gè)爬蟲(chóng),從豆瓣電影的網(wǎng)頁(yè)抓取電影排行榜。
3.1 準(zhǔn)備工作
目標(biāo)網(wǎng)址: https://movie.douban.com/top250
我們將抓取以下信息:
- 電影名稱
- 評(píng)分
- 引言
3.2 代碼實(shí)現(xiàn)
import requests
from bs4 import BeautifulSoup
import pandas as pd# 爬取一個(gè)頁(yè)面的數(shù)據(jù)
def scrape_page(url):headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"}response = requests.get(url, headers=headers)soup = BeautifulSoup(response.text, "html.parser")movies = []for item in soup.find_all("div", class_="item"):title = item.find("span", class_="title").textrating = item.find("span", class_="rating_num").textquote = item.find("span", class_="inq").text if item.find("span", class_="inq") else "N/A"movies.append({"Title": title, "Rating": rating, "Quote": quote})return movies# 主程序:爬取多頁(yè)
def main():base_url = "https://movie.douban.com/top250?start={}"all_movies = []for i in range(0, 250, 25): # 每頁(yè) 25 部電影url = base_url.format(i)print(f"Scraping: {url}")movies = scrape_page(url)all_movies.extend(movies)# 保存為 CSV 文件df = pd.DataFrame(all_movies)df.to_csv("douban_top250.csv", index=False)print("Scraping complete! Data saved to douban_top250.csv")if __name__ == "__main__":main()
3.3 代碼解析
-
設(shè)置請(qǐng)求頭: 模擬瀏覽器訪問(wèn),避免被反爬機(jī)制屏蔽。
-
BeautifulSoup 提取內(nèi)容: 使用
find
和find_all
定位 HTML 標(biāo)簽,提取標(biāo)題、評(píng)分和引言。 -
循環(huán)抓取多頁(yè): 構(gòu)造分頁(yè) URL,逐頁(yè)爬取。
-
保存為 CSV: 使用 pandas 將數(shù)據(jù)存儲(chǔ)為 CSV 文件。
4. 運(yùn)行與結(jié)果
運(yùn)行程序后,將生成 douban_top250.csv
文件,內(nèi)容如下:
5. 注意事項(xiàng)
5.1 遵守爬蟲(chóng)的禮儀
-
合理設(shè)置延遲: 在抓取頁(yè)面時(shí)加入適當(dāng)?shù)难訒r(shí),避免對(duì)服務(wù)器造成壓力。
-
檢查
robots.txt
: 訪問(wèn)目標(biāo)網(wǎng)站的https://example.com/robots.txt
查看允許抓取的內(nèi)容。 -
請(qǐng)求頭偽裝: 使用
User-Agent
模擬瀏覽器訪問(wèn)。
5.2 反爬機(jī)制應(yīng)對(duì)
如果遇到反爬機(jī)制,可以嘗試:
- 使用代理 IP。
- 處理動(dòng)態(tài)內(nèi)容(如 JavaScript 加載的頁(yè)面)。
- 使用更高級(jí)的庫(kù)如
selenium
或Playwright
。
6. 總結(jié)與擴(kuò)展
通過(guò)本文,我們學(xué)習(xí)了使用 Python 構(gòu)建基本爬蟲(chóng)的流程,并完成了一個(gè)抓取豆瓣電影 Top250 的項(xiàng)目。你可以將爬蟲(chóng)技術(shù)擴(kuò)展到更復(fù)雜的應(yīng)用場(chǎng)景,比如:
- 動(dòng)態(tài)加載數(shù)據(jù)的網(wǎng)站(如使用
selenium
或requests-html
)。 - 數(shù)據(jù)清洗與可視化(結(jié)合
pandas
和matplotlib
)。 - 大規(guī)模爬取(結(jié)合分布式爬蟲(chóng)框架如
Scrapy
)。
在實(shí)際應(yīng)用中,記得遵守法律法規(guī)和網(wǎng)站的爬蟲(chóng)協(xié)議,合理使用網(wǎng)絡(luò)爬蟲(chóng)技術(shù)!