主頁 > 知識(shí)庫 > 一個(gè)入門級(jí)python爬蟲教程詳解

一個(gè)入門級(jí)python爬蟲教程詳解

熱門標(biāo)簽:地圖標(biāo)注可以遠(yuǎn)程操作嗎 智能電話機(jī)器人調(diào)研 江門智能電話機(jī)器人 如何申請(qǐng)400電話代理 天津塘沽區(qū)地圖標(biāo)注 滴滴地圖標(biāo)注公司 甘肅高頻外呼系統(tǒng) 400電話在線如何申請(qǐng) 杭州房產(chǎn)地圖標(biāo)注

前言

本文目的:根據(jù)本人的習(xí)慣與理解,用最簡(jiǎn)潔的表述,介紹爬蟲的定義、組成部分、爬取流程,并講解示例代碼。

基礎(chǔ)

爬蟲的定義:定向抓取互聯(lián)網(wǎng)內(nèi)容(大部分為網(wǎng)頁)、并進(jìn)行自動(dòng)化數(shù)據(jù)處理的程序。主要用于對(duì)松散的海量信息進(jìn)行收集和結(jié)構(gòu)化處理,為數(shù)據(jù)分析和挖掘提供原材料。

今日t條就是一只巨大的“爬蟲”。

爬蟲由URL庫、采集器、解析器組成。

流程

如果待爬取的url庫不為空,采集器會(huì)自動(dòng)爬取相關(guān)內(nèi)容,并將結(jié)果給到解析器,解析器提取目標(biāo)內(nèi)容后進(jìn)行寫入文件或入庫等操作。

代碼

第一步:寫一個(gè)采集器

如下是一個(gè)比較簡(jiǎn)單的采集器函數(shù)。需要用到requests庫。
首先,構(gòu)造一個(gè)http的header,里面有瀏覽器和操作系統(tǒng)等信息。如果沒有這個(gè)偽造的header,可能會(huì)被目標(biāo)網(wǎng)站的WAF等防護(hù)設(shè)備識(shí)別為機(jī)器代碼并干掉。

然后,用requests庫的get方法獲取url內(nèi)容。如果http響應(yīng)代碼是200 ok,說明頁面訪問正常,將該函數(shù)返回值設(shè)置為文本形式的html代碼內(nèi)容。

如果響應(yīng)代碼不是200 ok,說明頁面不能正常訪問,將函數(shù)返回值設(shè)置為特殊字符串或代碼。

import requests

def get_page(url):
	headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'}
	response = requests.get(url, headers= headers)
	if response.status_code == 200:
	  return response.text
	else:
		return 'GET HTML ERROR !'

第二步:解析器

解析器的作用是對(duì)采集器返回的html代碼進(jìn)行過濾篩選,提取需要的內(nèi)容。
作為一個(gè)14年忠實(shí)用戶,當(dāng)然要用豆瓣舉個(gè)栗子 _

我們計(jì)劃爬取豆瓣排名TOP250電影的8個(gè)參數(shù):排名、電影url鏈接、電影名稱、導(dǎo)演、上映年份、國家、影片類型、評(píng)分。整理成字典并寫入文本文件。

待爬取的頁面如下,每個(gè)頁面包括25部電影,共計(jì)10個(gè)頁面。

在這里,必須要表揚(yáng)豆瓣的前端工程師們,html標(biāo)簽排版非常工整具有層次,非常便于信息提取。

下面是“肖申克的救贖”所對(duì)應(yīng)的html代碼:(需要提取的8個(gè)參數(shù)用紅線標(biāo)注)

根據(jù)上面的html編寫解析器函數(shù),提取8個(gè)字段。該函數(shù)返回值是一個(gè)可迭代的序列。
我個(gè)人喜歡用re(正則表達(dá)式)提取內(nèi)容。8個(gè)(.*?)分別對(duì)應(yīng)需要提取的字段。

import re

def parse_page(html):
	pattern = re.compile('em class="">(.*?)/em>.*?a href="(.*?)" rel="external nofollow" rel="external nofollow" >.*?span class="title">(.*?)/span>.*?div class="bd">.*?p class="">(.*?)nbsp.*?br>(.*?)nbsp;/nbsp;(.*?)nbsp;/nbsp;(.*?)/p>.*?span class="rating_num".*?"v:average">(.*?)/span>' , re.S)
	items = re.findall(pattern , html)
	for item in items:
		yield {
		  'rank': item[0],
		  'href': item[1],
		  'name': item[2],
		  'director': item[3].strip()[4:],
		  'year': item[4].strip(),
		  'country': item[5].strip(),
		  'style': item[6].strip(),
		  'score': item[7].strip()
		}

提取后的內(nèi)容如下:

整理成完整的代碼:(暫不考慮容錯(cuò))

import requests
import re
import json

def get_page(url):
	#采集器函數(shù)
	headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'}
	response = requests.get(url, headers= headers)
	if response.status_code == 200:
	  return response.text
	else:
		return 'GET HTML ERROR ! '


def parse_page(html):
	#解析器函數(shù)
	pattern = re.compile('em class="">(.*?)/em>.*?a href="(.*?)" rel="external nofollow" rel="external nofollow" >.*?span class="title">(.*?)/span>.*?div class="bd">.*?p class="">(.*?)nbsp.*?br>(.*?)nbsp;/nbsp;(.*?)nbsp;/nbsp;(.*?)/p>.*?span class="rating_num".*?"v:average">(.*?)/span>' , re.S)
	items = re.findall(pattern , html)
	for item in items:
		yield {
		  'rank': item[0],
		  'href': item[1],
		  'name': item[2],
		  'director': item[3].strip()[4:],
		  'year': item[4].strip(),
		  'country': item[5].strip(),
		  'style': item[6].strip(),
		  'score': item[7].strip()
		}


def write_to_file(content):
	#寫入文件函數(shù)
	with open('result.txt' , 'a' , encoding = 'utf-8') as file:
		file.write(json.dumps(content , ensure_ascii = False) + '\n')


if __name__== "__main__":
	# 主程序
	for i in range(10):
		url= 'https://movie.douban.com/top250?start='+ str(i*25)+ 'filter'
		for res in parse_page(get_page(url)):
			write_to_file(res)

非常簡(jiǎn)潔,非常符合python簡(jiǎn)單、高效的特點(diǎn)。

說明:

需要掌握待爬取url的規(guī)律,才能利用for循環(huán)等操作自動(dòng)化處理。
前25部影片的url是https://movie.douban.com/top250?start=0filter,第26-50部影片url是https://movie.douban.com/top250?start=25filter。規(guī)律就在start參數(shù),將start依次設(shè)置為0、25、50、75。。。225,就能獲取所有頁面的鏈接。parse_page函數(shù)的返回值是一個(gè)可迭代序列,可以理解為字典的集合。運(yùn)行完成后,會(huì)在程序同目錄生成result.txt文件。內(nèi)容如下:

 

到此這篇關(guān)于一個(gè)入門級(jí)python爬蟲教程詳解的文章就介紹到這了,更多相關(guān)python爬蟲入門教程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python從入門到精通 windows安裝python圖文教程
  • Python面向?qū)ο笏枷肱c應(yīng)用入門教程【類與對(duì)象】
  • 一小時(shí)快速入門Python教程

標(biāo)簽:漢中 廊坊 河池 德宏 臨汾 重慶 東莞 長(zhǎng)春

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《一個(gè)入門級(jí)python爬蟲教程詳解》,本文關(guān)鍵詞  一個(gè),入門,級(jí),python,爬蟲,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《一個(gè)入門級(jí)python爬蟲教程詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于一個(gè)入門級(jí)python爬蟲教程詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章