最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年01月27日 14:36:58   作者:雨飄香  
這篇文章主要介紹了一個(gè)入門級(jí)python爬蟲教程詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

前言

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

基礎(chǔ)

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

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

爬蟲由URL庫(kù)、采集器、解析器組成。

流程

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

在這里插入圖片描述

代碼

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

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

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

如果響應(yīng)代碼不是200 ok,說(shuō)明頁(yè)面不能正常訪問(wèn),將函數(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)行過(guò)濾篩選,提取需要的內(nèi)容。
作為一個(gè)14年忠實(shí)用戶,當(dāng)然要用豆瓣舉個(gè)栗子 _

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

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

在這里插入圖片描述

在這里,必須要表?yè)P(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)。

說(shuō)明:

需要掌握待爬取url的規(guī)律,才能利用for循環(huán)等操作自動(dòng)化處理。
前25部影片的url是https://movie.douban.com/top250?start=0&filter,第26-50部影片url是https://movie.douban.com/top250?start=25&filter。規(guī)律就在start參數(shù),將start依次設(shè)置為0、25、50、75。。。225,就能獲取所有頁(yè)面的鏈接。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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PyTorch一小時(shí)掌握之神經(jīng)網(wǎng)絡(luò)分類篇

    PyTorch一小時(shí)掌握之神經(jīng)網(wǎng)絡(luò)分類篇

    這篇文章主要介紹了PyTorch一小時(shí)掌握之神經(jīng)網(wǎng)絡(luò)分類篇,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Python常見字符串操作函數(shù)小結(jié)【split()、join()、strip()】

    Python常見字符串操作函數(shù)小結(jié)【split()、join()、strip()】

    這篇文章主要介紹了Python常見字符串操作函數(shù),結(jié)合實(shí)例形式總結(jié)分析了split()、join()及strip()的常見使用技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-02-02
  • Python MySQLdb模塊連接操作mysql數(shù)據(jù)庫(kù)實(shí)例

    Python MySQLdb模塊連接操作mysql數(shù)據(jù)庫(kù)實(shí)例

    這篇文章主要介紹了Python MySQLdb模塊連接操作mysql數(shù)據(jù)庫(kù)實(shí)例,本文直接給出操作mysql代碼實(shí)例,包含創(chuàng)建表、插入數(shù)據(jù)、插入多條數(shù)據(jù)、查詢數(shù)據(jù)等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • python線程池 ThreadPoolExecutor 的用法示例

    python線程池 ThreadPoolExecutor 的用法示例

    這篇文章主要介紹了python線程池 ThreadPoolExecutor 的用法示例,幫助大家更好得理解和使用python線程池,感興趣的朋友可以了解下
    2020-10-10
  • 快速了解python leveldb

    快速了解python leveldb

    這篇文章主要介紹了快速了解python leveldb,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • python實(shí)現(xiàn)ssh及sftp功能(實(shí)例代碼)

    python實(shí)現(xiàn)ssh及sftp功能(實(shí)例代碼)

    這篇文章主要介紹了python實(shí)現(xiàn)ssh及sftp功能 ,本文分步驟通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Python+Selenium實(shí)現(xiàn)自動(dòng)填寫問(wèn)卷

    Python+Selenium實(shí)現(xiàn)自動(dòng)填寫問(wèn)卷

    這篇文章主要介紹了如何利用Python Selenium實(shí)現(xiàn)自動(dòng)填寫問(wèn)卷功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-03-03
  • Python編程使用PyQt5制作動(dòng)態(tài)鐘表示例

    Python編程使用PyQt5制作動(dòng)態(tài)鐘表示例

    本篇文章將用 Python 同時(shí)繪制兩種類型的表;一個(gè)是上面提到的含有時(shí)、分、秒針的鐘表(為了方便,下面統(tǒng)稱為老式鐘表),一個(gè)是電子表,最終運(yùn)行效果文中如下呈現(xiàn)
    2021-10-10
  • 淺談Python數(shù)學(xué)建模之線性規(guī)劃

    淺談Python數(shù)學(xué)建模之線性規(guī)劃

    線性規(guī)劃是運(yùn)籌學(xué)中研究較早、發(fā)展較快、應(yīng)用廣泛、方法較成熟的一個(gè)重要分支,它是輔助人們進(jìn)行科學(xué)管理的一種數(shù)學(xué)方法。研究線性約束條件下線性目標(biāo)函數(shù)的極值問(wèn)題的數(shù)學(xué)理論和方法
    2021-06-06
  • python實(shí)現(xiàn)畫圓功能

    python實(shí)現(xiàn)畫圓功能

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)畫圓功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01

最新評(píng)論

澎湖县| 镇坪县| 高平市| 台安县| 卓尼县| 兴仁县| 微博| 大厂| 济南市| 安徽省| 噶尔县| 湖州市| 神池县| 乡宁县| 金堂县| 绥德县| 岑溪市| 肥东县| 通辽市| 余姚市| 安多县| 明水县| 无棣县| 新龙县| 荥经县| 石棉县| 东至县| 陇南市| 那坡县| 永胜县| 石渠县| 崇礼县| 蒙城县| 贡嘎县| 津南区| 遂溪县| 宜君县| 屯留县| 徐州市| 格尔木市| 平江县|