欧美麻豆久久久久久中文_成年免费观看_男人天堂亚洲成人_中国一级片_动漫黄网站免费永久在线观看_国产精品自产av一区二区三区

中培偉業(yè)IT資訊頻道
您現(xiàn)在的位置:首頁(yè) > IT資訊 > 學(xué)習(xí)交流 > python爬蟲

python爬蟲

2021-07-01 15:53:05 | 來(lái)源:中培企業(yè)IT培訓(xùn)網(wǎng)
python這們計(jì)算機(jī)語(yǔ)言對(duì)大家來(lái)說(shuō)應(yīng)該就不陌生了。它的核心內(nèi)容在往期的文章我們也有講解。那么python爬蟲又應(yīng)該認(rèn)識(shí)如何它呢?學(xué)習(xí)它,首先要了解爬蟲思路,其次就是實(shí)戰(zhàn)解析。實(shí)戰(zhàn)解析又包括四個(gè)小的環(huán)節(jié)。

兩周前,一位同學(xué)問(wèn)小央,平時(shí)有沒有寫過(guò)技術(shù)類博客。小央大言不慚,隨口就說(shuō)下次可以嘗試。

這不,自己挖的坑,哭也得填上。正巧,最近要統(tǒng)計(jì)自己的閱讀記錄,一個(gè)個(gè)看多費(fèi)勁呀,如果能寫個(gè)爬蟲程序,自動(dòng)化獲取數(shù)據(jù),豈不美哉。

一瓶不響半瓶晃蕩,技術(shù)渣小央,剛有點(diǎn)小成績(jī)的時(shí)候,就忍不住的要分享給小白們了。

一、爬蟲思路

爬蟲是指請(qǐng)求網(wǎng)站并獲取數(shù)據(jù)的自動(dòng)化程序,又稱網(wǎng)頁(yè)蜘蛛或網(wǎng)絡(luò)機(jī)器,最常用領(lǐng)域是搜索引擎,它的基本流程是明確需求-發(fā)送請(qǐng)求-獲取數(shù)據(jù)-解析數(shù)據(jù)-存儲(chǔ)數(shù)據(jù)。

網(wǎng)頁(yè)之所以能夠被爬取,主要是有以下三大特征:

網(wǎng)頁(yè)都有唯一的URL(統(tǒng)一資源定位符,也就是網(wǎng)址)進(jìn)行定位

網(wǎng)頁(yè)都使用HTML(定位超文本標(biāo)記語(yǔ)言)來(lái)描述頁(yè)面信息

網(wǎng)頁(yè)都使用HTTP/HTTPS(超文本傳輸協(xié)議)協(xié)議來(lái)傳輸HTML數(shù)據(jù)

因此,只要我們能確定需要爬取的網(wǎng)頁(yè) URL地址,通過(guò) HTTP/HTTPS協(xié)議來(lái)獲取對(duì)應(yīng)的 HTML頁(yè)面,就能提取 HTML頁(yè)面里有用的數(shù)據(jù)。

在工具的選擇上,任何支持網(wǎng)絡(luò)通信的語(yǔ)言都可以寫爬蟲,比如 c++、 java、 go、 node等,而 python則是用的最多最廣的,并且也誕生了很多優(yōu)秀的庫(kù)和框架,如 scrapy、 BeautifulSoup 、 pyquery、 Mechanize等。

私信小編001 有神秘驚喜大禮包!

BeautifulSoup是一個(gè)非常流行的 Pyhon 模塊。該模塊可以解析網(wǎng)頁(yè),并提供定位內(nèi)容的便捷接口。

但是在解析速度上不如 Lxml模塊,因?yàn)楹笳呤怯肅語(yǔ)言編寫,其中 Xpath可用來(lái)在 XML文檔中對(duì)元素和屬性進(jìn)行遍歷。

綜上,我們本次爬取工具選擇 Python,使用的包有 requests、 Lxml、 xlwt、 xlrd,分別用于模擬賬戶登錄、爬取網(wǎng)頁(yè)信息和操作 Excel進(jìn)行數(shù)據(jù)存儲(chǔ)等。

二、實(shí)戰(zhàn)解析

1. 模擬賬戶登錄

因?yàn)橐廊€(gè)人賬戶下的讀書列表,我們首先要讓 Python創(chuàng)建用戶會(huì)話,用于在跨請(qǐng)求時(shí)保存Cookie值,實(shí)現(xiàn)從客戶端瀏覽器連接服務(wù)器開始,到客戶端瀏覽器與服務(wù)器斷開。

其次要處理請(qǐng)求頭 Header,發(fā)送附帶賬戶名和密碼的 POST請(qǐng)求,并獲取登陸后的 Cookie值,保存在會(huì)話里。

登陸進(jìn)去之后,我們就可以長(zhǎng)驅(qū)直入進(jìn)行爬蟲了;否則,它就會(huì)因請(qǐng)求不合法報(bào)錯(cuò)。

代碼示例

# 1. 創(chuàng)建session對(duì)象,可以保存Cookie值ssion = requests.session()# 2. 處理 headersuser_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'headers={'User-Agent':user_agent}# 3. 需要登錄的用戶名和密碼data = {"email":"豆瓣賬戶名XX", "password":"豆瓣密碼XX"}# 4. 發(fā)送附帶用戶名和密碼的請(qǐng)求,并獲取登錄后的Cookie值,保存在ssion里ssion.post("https://www.douban.com/accounts/login", data = data)respon=ssion.get(url,headers=headers)

2. 分析網(wǎng)頁(yè)結(jié)構(gòu)

進(jìn)入讀書頁(yè)面,右鍵選擇“檢查”,可以看到如下界面:當(dāng)鼠標(biāo)定位在某一行代碼時(shí),就會(huì)選中左側(cè)對(duì)應(yīng)模塊。

所有圖書內(nèi)容的標(biāo)簽,存放在一個(gè)類名為 id="content"的div盒子, class="subject-item"的li盒子。

同樣方法,我們也可以找到書名、作者、出版社、何時(shí)讀過(guò)、評(píng)論信息,分別對(duì)應(yīng)哪些標(biāo)簽。

最終,我們通過(guò)CSS路徑提取來(lái)提取對(duì)應(yīng)標(biāo)簽數(shù)據(jù)。

代碼示例

#因?yàn)槊宽?yè)有15本書,所以這里做了個(gè)循環(huán)for tr in trs: i = 1 while i <= 15: data = [] title = tr.xpath("./ul/li["+str(i)+"]/div[2]/h2/a/text()") info = tr.xpath('./ul/li['+str(i)+']/div[2]/div[1]/text()') date = tr.xpath('./ul/li['+str(i)+']/div[2]/div[2]/div[1]/span[2]/text()') comment = tr.xpath('./ul/li['+str(i)+']/div[2]/div[2]/p/text()')

3. 自動(dòng)翻頁(yè),循環(huán)爬取

因?yàn)橐廊v史讀書清單,當(dāng)爬完一頁(yè)的時(shí)候,需要程序能夠?qū)崿F(xiàn)自動(dòng)翻頁(yè)功能。

一種方法是讓它自動(dòng)點(diǎn)擊下一頁(yè),但這個(gè)學(xué)習(xí)成本有點(diǎn)高,吃力不討好;另一種方法,就是尋找網(wǎng)頁(yè)之間的規(guī)律,做個(gè)循環(huán)即可。

以央之姑娘的豆瓣賬戶為例:很容易發(fā)現(xiàn)網(wǎng)頁(yè)之間的區(qū)別僅在于start值不同,第一頁(yè)的 start=0.第二頁(yè) start=15.以此類推,最后一頁(yè),即19頁(yè)的 start=(19-1)*15=270.

找到這樣的規(guī)律就很容易實(shí)現(xiàn)Python自動(dòng)翻頁(yè)功能,條條大路通羅馬,適合自己的就是最好的。

代碼示例

def getUrl(self): i = 0 while i < 271: url = ('https://book.douban.com/people/81099629/collect?start='+str(i)+'&sort=time&rating=all&filter=all&mode=grid') self.spiderPage(url) i += 15

4. 數(shù)據(jù)存儲(chǔ)

數(shù)據(jù)存儲(chǔ)有很多種方法,因?yàn)閿?shù)據(jù)量不大,用Excel即可滿足,具體方法就不在這里贅述了。

代碼示例

def __init__(self): self.f = xlwt.Workbook() # 創(chuàng)建工作薄 self.sheet1 = self.f.add_sheet(u'央之姑娘', cell_overwrite_ok=True) # 命名table self.rowsTitle = [u'編號(hào)',u'書名', u'信息', u'讀過(guò)日期', u'評(píng)論'] # 創(chuàng)建標(biāo)題 for i in range(0. len(self.rowsTitle)): # 最后一個(gè)參數(shù)設(shè)置樣式 self.sheet1.write(0. i, self.rowsTitle[i], self.set_style('Times new Roman', 220. True)) # Excel保存位置 self.f.save('C://Users//DELL//央之姑娘.xlsx')

def set_style(self, name, height, bold=False): style = xlwt.XFStyle() # 初始化樣式 font = xlwt.Font() # 為樣式創(chuàng)建字體 font.name = name font.bold = bold font.colour_index = 2 font.height = height style.font = font return style

三、效果演示

前面講了爬蟲的原理和方法,那么接下來(lái)我們就展示一下具體效果:

附錄:完整代碼

from lxml import etree

import requests

import xlwt

import xlrd

class douban(object):

def __init__(self):

self.f = xlwt.Workbook() # 創(chuàng)建工作薄

self.sheet1 = self.f.add_sheet(u'央之姑娘', cell_overwrite_ok=True) # 命名table

self.rowsTitle = [u'編號(hào)',u'書名', u'信息', u'讀過(guò)日期', u'評(píng)論'] # 創(chuàng)建標(biāo)題

for i in range(0. len(self.rowsTitle)):

# 最后一個(gè)參數(shù)設(shè)置樣式

self.sheet1.write(0. i, self.rowsTitle[i], self.set_style('Times new Roman', 220. True))

# Excel保存位置

self.f.save('C://Users//DELL//央之姑娘.xlsx')

def set_style(self, name, height, bold=False):

style = xlwt.XFStyle() # 初始化樣式

font = xlwt.Font() # 為樣式創(chuàng)建字體

font.name = name

font.bold = bold

font.colour_index = 2

font.height = height

style.font = font

return style

def getUrl(self):

#自動(dòng)翻頁(yè)

'''

url = ('https://book.douban.com/people/81099629/collect?start=0&sort=time&rating=all&filter=all&mode=grid')

self.spiderPage(url)

'''

i = 0

while i < 271:

url = ('https://book.douban.com/people/81099629/collect?start='+str(i)+'&sort=time&rating=all&filter=all&mode=grid')

self.spiderPage(url)

i += 15

def spiderPage(self,url):

if url is None:

return None

try:

data=xlrd.open_workbook('C://Users//DELL//央之姑娘.xlsx')

table=data.sheets()[0]

rowCount=table.nrows#獲取行數(shù)

# 1. 創(chuàng)建session對(duì)象,可以保存Cookie值

ssion = requests.session()

# 2. 處理 headers

user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36'

headers={'User-Agent':user_agent}

# 3. 需要登錄的用戶名和密碼

data = {"email":"豆瓣賬戶名XX", "password":"豆瓣密碼XX"}

# 4. 發(fā)送附帶用戶名和密碼的請(qǐng)求,并獲取登錄后的Cookie值,保存在ssion里

ssion.post("https://www.douban.com/accounts/login", data = data)

respon=ssion.get(url,headers=headers)

htmltext=respon.text

s = etree.HTML(htmltext)

trs = s.xpath('//*[@id="content"]/div[2]/div[1]')

m=0

for tr in trs:

i = 1

while i <= 15:

data = []

title = tr.xpath("./ul/li["+str(i)+"]/div[2]/h2/a/text()")

info = tr.xpath('./ul/li['+str(i)+']/div[2]/div[1]/text()')

date = tr.xpath('./ul/li['+str(i)+']/div[2]/div[2]/div[1]/span[2]/text()')

comment = tr.xpath('./ul/li['+str(i)+']/div[2]/div[2]/p/text()')

title=title[0] if title else ''

info=info[0] if info else ''

date=date[0] if date else ''

comment=comment[0] if comment else ''

data.append(rowCount+m)

data.append(title)

data.append(info)

data.append(date)

data.append(comment)

i += 1

for n in range(len(data)):

self.sheet1.write(rowCount+m,n,data[n])

m+=1

print(m)

print(title, info, date, comment)

finally:

self.f.save('C://Users//DELL//央之姑娘.xlsx')

if '_main_':

qn=douban()

qn.getUrl()

通過(guò)這些部分的介紹,你應(yīng)該學(xué)會(huì)了不少東西吧?有句話是這樣說(shuō)的:興趣是最好的老師,如果你對(duì)爬蟲有興趣,那你可以好好了解一下這里還沒有講到的東西。想要了解更多關(guān)于Python的信息,請(qǐng)繼續(xù)關(guān)注中培偉業(yè)。
標(biāo)簽: Python爬蟲
主站蜘蛛池模板: 欧美人与动xxxxz0oz小说 | 亚洲精品不卡无码福利在线观看 | 国产AV亚洲精品久久久久久小说 | 中文字幕第68页 | 成年在线网站免费观看无广告 | 一区一区三区四区产品动漫 | 色综合伊人丁香五月桃花婷婷 | 日本一卡2卡3卡四卡精品网站 | 国产乱码精品一区二区三区麻豆 | 综合日韩欧美 | 在线毛片片免费观看 | 在线观看成人永久免费网站 | 国产精品无码翘臀在线看 | 日本毛片视频 | 97在线观看播放 | 熟妇女人妻丰满少妇中文字幕 | 欧美无砖专区一中文字 | 麻豆123| 国产精品51麻豆cm传媒的特点 | 国产日韩欧美综合在线 | 天堂bt种子资源在线www | 欧美大喷水吹潮视频十大 | G国产精品无马 | 日本喷奶水中文字幕视频 | JAPAN黑人极大黑炮 | 综合欧美亚洲日本少妇 | 夜夜揉揉日日人人 | 久久中文字幕无码专区 | 四川少妇被弄到高潮 | 蜜桃视频在线免费播放 | 成人精品视频一区二区 | 久久视精品 | 被黑人伦流澡到高潮hn小说 | 国产色爱av资源综合区 | 老汉av久久午夜一区 | 亚洲乱码中文字幕精品久久 | 亚洲v天堂v手机在线 | 少妇办公室好紧好爽再浪一点 | 男人肌肌捅女人肌肌视频 | 国产偷V国产偷V亚洲高清 | 精品久久8X国产免费观看 |