欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python爬取內(nèi)容存入Excel實(shí)例

 更新時(shí)間:2019年02月20日 09:22:13   作者:RunnerJxc  
這篇文章主要為大家詳細(xì)介紹了python爬取內(nèi)容存入Excel實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

最近老師布置了個(gè)作業(yè),爬取豆瓣top250的電影信息。按照套路,自然是先去看看源代碼了,一看,基本的信息竟然都有,心想這可省事多了。簡(jiǎn)單分析了下源代碼,標(biāo)記出所需信息的所在標(biāo)簽,ok,開始干活!

鑒于正則表達(dá)式的資料已經(jīng)看了不少,所以本次除了beautifulsoup外,還有些re的使用,當(dāng)然,比較簡(jiǎn)單。而爬到信息后,以往一般是存到txt文件,或者數(shù)據(jù)庫(kù)中,老是重樣的操作,難免有些‘厭倦’。心想,干嘛不存到Excel表呢?對(duì)啊,可以存到Excel表。

環(huán)境準(zhǔn)備:pip install openpyxl  (假設(shè)你已配好了python環(huán)境)

好了,廢話少說,上代碼。  

# coding=UTF-8
'''
 function:爬取豆瓣top250的電影信息,并寫入Excel文件
'''
import requests
import re
from openpyxl import workbook # 寫入Excel表所用
from openpyxl import load_workbook # 讀取Excel表所用
from bs4 import BeautifulSoup as bs
import os
os.chdir('C:\Users\Administrator\Desktop') # 更改工作目錄為桌面
 
 
def getHtml(src):
 html = requests.get(src).content
 getData(html, src) # 首頁(yè)鏈接和其他頁(yè)不同,所以單獨(dú)獲取信息
 urls = re.findall('href="(.*filter=?)', html) # re獲取獲取跳轉(zhuǎn)鏈接的href
 for u in range(len(urls) - 2): # 匹配到的跳轉(zhuǎn)鏈接最后兩個(gè)重復(fù),需去掉
  next_url = 'https://movie.douban.com/top250' + urls[u]
  html = requests.get(next_url).content
  getData(html, next_url)
 
 
def getData(html, num_url): # html:網(wǎng)頁(yè)源碼 ,num_url:頁(yè)面鏈接
 global ws # 全局工作表對(duì)象
 Name = [] # 存儲(chǔ)電影名
 Dr = [] # 存儲(chǔ)導(dǎo)演信息
 Ma = [] # 存儲(chǔ)主演信息
 Si = [] # 存儲(chǔ)簡(jiǎn)介
 R_score = [] # 存儲(chǔ)評(píng)分
 R_count = [] # 存儲(chǔ)評(píng)論人數(shù)
 R_year = [] # 存儲(chǔ)年份
 R_area = [] # 存儲(chǔ)地區(qū)
 R_about = [] # 存儲(chǔ)劇情類型
 soup = bs(html, 'lxml')
 for n in soup.find_all('div', class_='hd'):
  # ts = n.contents[1].text # 得到電影的所有名稱
  ts = n.contents[1].text.strip().split('/')[0] # 得到電影中文名
  Name.append(ts)
 for p in soup.find_all('p', class_=''):
  infor = p.text.strip().encode('utf-8') #此處用utf-8編碼,以免下面查找 ‘主演'下標(biāo)報(bào)錯(cuò)
  ya = re.findall('[0-9]+.*\/?', infor)[0] # re得到年份和地區(qū)
  R_year.append(ya.split('/')[0]) # 得到年份
  R_area.append(ya.split('/')[1]) # 得到地區(qū)
  R_about.append(infor[infor.rindex('/') + 1:]) # rindex函數(shù)取最后一個(gè)/下標(biāo),得到劇情類型
  try:
   sub = infor.index('主演') # 取得主演下標(biāo)
   Dr.append(infor[0:sub].split(':')[1]) # 得到導(dǎo)演信息
   mh = infor[sub:].split(':')[1] # 得到主演后面的信息
   Ma.append(re.split('[1-2]+', mh)[0]) # 正則切片得到主演信息
  except:
   print '無主演信息'
   Dr.append(infor.split(':')[1].split('/')[0])
   Ma.append('無介紹...')
 for r in soup.find_all('div', class_='star'):
  rs = r.contents # 得到該div的子節(jié)點(diǎn)列表
  R_score.append(rs[3].text) # 得到評(píng)分
  R_count.append(rs[7].text) # 得到評(píng)論人數(shù)
 for s in soup.find_all('span', 'inq'):
  Si.append(s.text) # 得到簡(jiǎn)介
 if len(Si) < 25:
  for k in range(25 - len(Si)):
   Si.append('本頁(yè)有的電影沒簡(jiǎn)介,建議查看核對(duì),鏈接:' + num_url)
 
 for i in range(25): # 每頁(yè)25條數(shù)據(jù),寫入工作表中
  ws.append([Name[i], R_year[i], R_area[i], R_about[i],
     Dr[i], Ma[i], R_score[i], R_count[i], Si[i]])
 
 
if __name__ == '__main__':
 # 讀取存在的Excel表測(cè)試
 #  wb = load_workbook('test.xlsx') #加載存在的Excel表
 #  a_sheet = wb.get_sheet_by_name('Sheet1') #根據(jù)表名獲取表對(duì)象
 #  for row in a_sheet.rows: #遍歷輸出行數(shù)據(jù)
 #   for cell in row: #每行的每一個(gè)單元格
 #    print cell.value,
 
 # 創(chuàng)建Excel表并寫入數(shù)據(jù)
 wb = workbook.Workbook() # 創(chuàng)建Excel對(duì)象
 ws = wb.active # 獲取當(dāng)前正在操作的表對(duì)象
 # 往表中寫入標(biāo)題行,以列表形式寫入!
 ws.append(['電影名', '年份', '地區(qū)', '劇情類型', '導(dǎo)演', '主演', '評(píng)分', '評(píng)論人數(shù)', '簡(jiǎn)介'])
 src = 'https://movie.douban.com/top250'
 getHtml(src)
 wb.save('test2.xlsx') # 存入所有信息后,保存為filename.xlsx

代碼中已有不少注釋,這里說下爬取過程中遇到的小問題。

1.soup的contents方法,返回的是某標(biāo)簽下的子節(jié)點(diǎn)列表,但剛開始總是取不到想要的值,輸出其長(zhǎng)度后,有些傻眼..TM什么情況?有這么多的子節(jié)點(diǎn)嗎?較真的我又去數(shù)了幾遍,最后發(fā)現(xiàn),它竟然連"換行"都算作是子節(jié)點(diǎn)!莫名地有點(diǎn)方...不知各位有沒有遇到過。

如圖,我按列表下標(biāo)標(biāo)記,0,2,4,6,8是換行,但也被算作子節(jié)點(diǎn)...

2.還是contents方法,代碼中的 '#得到電影所有名稱' 處的代碼 n.contents[1]獲取的除了a標(biāo)簽外,還有其下的span標(biāo)簽,這是為何?它們算一個(gè)整體?

3.對(duì)如下圖的電影信息處理時(shí),出現(xiàn)了幾處錯(cuò)誤,原因有以下幾點(diǎn):

(1)部分電影沒有主演信息...

(2)主演信息為這樣'主演: ',就一個(gè)主演字樣,無內(nèi)容

(3)部分電影沒有簡(jiǎn)介

(4)當(dāng)主演信息中沒有'...'時(shí),獲取主演信息受阻

 解決方案:(1)(2)都是主演問題,判斷是否存在即可。(我以捕獲異常處理)

(3)是簡(jiǎn)介問題,我無法給出具體哪部電影沒有簡(jiǎn)介,但給了該電影所在的頁(yè)面鏈接,可訪問核查。(貌似有點(diǎn)笨)

(4)獲取受阻是因?yàn)楹竺鏇]有精確定位點(diǎn),最后以re.split('[1-2]+')方法解決,匹配年份第一位作為分片點(diǎn)

本次分享就到這兒了,最后,照舊放幾張結(jié)果圖吧。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python自動(dòng)化生成IOS的圖標(biāo)

    python自動(dòng)化生成IOS的圖標(biāo)

    這篇文章主要為大家詳細(xì)介紹了python如何自動(dòng)化生成IOS的圖標(biāo),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • TensorFlow數(shù)據(jù)輸入的方法示例

    TensorFlow數(shù)據(jù)輸入的方法示例

    這篇文章主要介紹了TensorFlow數(shù)據(jù)輸入的方法示例,主要介紹了4種方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • python包pdfkit(wkhtmltopdf)?將HTML轉(zhuǎn)換為PDF的操作方法

    python包pdfkit(wkhtmltopdf)?將HTML轉(zhuǎn)換為PDF的操作方法

    pdfkit,把HTML+CSS格式的文件轉(zhuǎn)換成PDF格式文檔的一種工具。它就是html轉(zhuǎn)成pdf工具包wkhtmltopdf的Python封裝。所以,必須手動(dòng)安裝wkhtmltopdf,這篇文章主要介紹了python包pdfkit(wkhtmltopdf)將HTML轉(zhuǎn)換為PDF,需要的朋友可以參考下
    2022-04-04
  • 對(duì)python 樹狀嵌套結(jié)構(gòu)的實(shí)現(xiàn)思路詳解

    對(duì)python 樹狀嵌套結(jié)構(gòu)的實(shí)現(xiàn)思路詳解

    今天小編就為大家分享一篇對(duì)python 樹狀嵌套結(jié)構(gòu)的實(shí)現(xiàn)思路詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python?pip指定安裝源的方法詳解

    Python?pip指定安裝源的方法詳解

    pip是Python包管理工具,該工具提供了對(duì)Python包的查找、下載、安裝、卸載的功能,這篇文章主要給大家介紹了關(guān)于Python?pip指定安裝源的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • 詳解Python如何實(shí)現(xiàn)對(duì)比兩個(gè)Excel數(shù)據(jù)差異

    詳解Python如何實(shí)現(xiàn)對(duì)比兩個(gè)Excel數(shù)據(jù)差異

    這篇文章主要為大家詳細(xì)介紹了Python是如何實(shí)現(xiàn)對(duì)比兩個(gè)Excel數(shù)據(jù)差異的,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2022-12-12
  • Python實(shí)現(xiàn)微信好友數(shù)據(jù)爬取及分析

    Python實(shí)現(xiàn)微信好友數(shù)據(jù)爬取及分析

    這篇文章會(huì)基于Python對(duì)微信好友進(jìn)行數(shù)據(jù)分析,這里選擇的維度主要有:性別、頭像、簽名、位置,主要采用圖表和詞云兩種形式來呈現(xiàn)結(jié)果,其中,對(duì)文本類信息會(huì)采用詞頻分析和情感分析兩種方法,感興趣的小伙伴可以了解一下
    2021-12-12
  • Python生成隨機(jī)密碼

    Python生成隨機(jī)密碼

    這篇文章主要介紹了Python生成隨機(jī)密碼的代碼分享,由于是新手,僅僅是簡(jiǎn)單的實(shí)現(xiàn),未作任何其他處理,小伙伴們自己參考下吧。
    2015-03-03
  • Python中的日期時(shí)間處理詳解

    Python中的日期時(shí)間處理詳解

    Python程序能用很多方式處理日期和時(shí)間。轉(zhuǎn)換日期格式是一個(gè)常見的例行瑣事,這篇文章主要介紹了Python中的日期時(shí)間處理的幾種方式的區(qū)別和聯(lián)系,需要的朋友可以參考下
    2016-11-11
  • python中的load、loads實(shí)現(xiàn)反序列化示列

    python中的load、loads實(shí)現(xiàn)反序列化示列

    這篇文章主要介紹python中的load、loads實(shí)現(xiàn)反序列化,在python自動(dòng)化中,我們傳遞一些參數(shù)是需要從文件中讀取過來的,讀取過來的字典并非python對(duì)象數(shù)據(jù)類型而是string類型,下面來看詳情內(nèi)容吧
    2021-10-10

最新評(píng)論