1. 程式人生 > >孤荷淩寒自學python第七十二天開始寫Python的第一個爬蟲2

孤荷淩寒自學python第七十二天開始寫Python的第一個爬蟲2

db2 它的 def 基礎上 開始 零基礎 精神 agent 收費

孤荷淩寒自學python第七十二天開始寫Python的第一個爬蟲2

(完整學習過程屏幕記錄視頻地址在文末)

今天在上一天的基礎上繼續完成對我的第一個代碼程序的書寫。

直接上代碼。詳細過程見文末屏幕錄像。

```

import requests

from bs4 import BeautifulSoup

import re

import _mty

import _mf

def msgbox(info,titletext=‘孤荷淩寒的DB模塊對話框QQ578652607‘,style=0,isShowErrMsg=False):

return _mty.msgboxGhlh(info,titletext,style,isShowErrMsg)

def myfirst(s,h):

r=requests.get(s,headers=h)

#print(r.text) #r.text得到的是頁面源html代碼

_mf.writeAllTextToTxtFileGhlh(‘1.txt‘,r.text)

bs=BeautifulSoup(r.text,features="lxml") #第二個參數指明了解析器,得到的是一個beautifulsoup對象

s=bs.prettify()

_mf.writeAllTextToTxtFileGhlh(‘2.txt‘,str(s))

rs=bs.select(‘.bigsize‘) #選擇指定style樣式表的html標簽元素

for i in rs:

ele=i.find_all(‘a‘) #每個h5標簽下只有一個a標簽

strls=ele[0].get(‘href‘)

msgbox(strls) #取出地址

getcontentpage(strls,h)

break

def getcontentpage(strurl,h):

r=requests.get(strurl,headers=h)

_mf.writeAllTextToTxtFileGhlh(‘3.txt‘,r.text)

bs=BeautifulSoup(r.text,features="lxml") #第二個參數指明了解析器,得到的是一個beautifulsoup對象

s=bs.prettify()

_mf.writeAllTextToTxtFileGhlh(‘4.txt‘,str(s))

#---------------------------

#eletemp=bs.find_all("#epContentLeft") #現在eletemp是一個rs集合對象

#上一句是錯誤的,通過html標簽對象的id值來查找應當使用的方法是:select方法

eletemp=bs.select(‘#epContentLeft‘)

msgbox(str(type(eletemp)))

eletitleparent=eletemp[0]

eletitle=eletitleparent.h1

elesource=eletitleparent.div #elesource這種對象現在被稱為:bs.element.Tag對象,可以被轉換為列表,但不是列表

#msgbox(str(elesource))

msgbox(str(type(elesource)))

strtitle=eletitle.string

strsource=list(elesource)[0] + ‘ ‘ + elesource.find_all(‘a‘)[0].string

msgbox(strtitle)

msgbox(strsource)

#取正文

elecontent=bs.select(‘#endText‘) #所有的正文內容都這個div中

msgbox(str(elecontent))






strurl=‘http://tech.163.com/special/techscience/‘

header={

‘Accept‘:‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8‘,

‘Accept-Encoding‘:‘gzip, deflate‘,

‘Accept-Language‘:‘zh-CN,zh;q=0.9‘,

‘Cache-Control‘:‘max-age=0‘,

‘Connection‘:‘keep-alive‘,

‘Cookie‘:‘_ntes_nuid=4c64ad6c80e3504f05302ac133efb277; _ntes_nnid=eb7c24e0daf48e922e31dc81e431fde2,1536978956105; Province=023; City=023; NNSSPID=acab5be191004a2b81a3a6ee60f516dc; NTES_hp_textlink1=old; UM_distinctid=1683adcaeaf2f8-0e31bcdad8532c-3c604504-144000-1683adcaeb094d; vjuids=-7a5afdb26.1683adccded.0.d9d34439a4e48; vjlast=1547175776.1547175776.30; ne_analysis_trace_id=1547175775731; s_n_f_l_n3=7476c45eb02177f91547175775852; vinfo_n_f_l_n3=7476c45eb02177f9.1.0.1547175775852.0.1547176062972‘,

‘Host‘:‘tech.163.com‘,

‘If-Modified-Since‘:‘Fri, 11 Jan 2019 03:01:05 GMT‘,

‘Referer‘:‘http://tech.163.com/‘,

‘Upgrade-Insecure-Requests‘:‘1‘,

‘User-Agent‘:‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36‘

}

header2={

‘Host‘:‘tech.163.com‘,

‘User-Agent‘:‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36‘

}

myfirst(strurl,header2)

```

一、今天發生的主要新手易錯點如下:

beautifulsoup對象定位一個指定ID的html標簽對象的方法是:

select

方法

而不是

find_all

方法。

二、其它收獲

(一)今天了解了在bs中最終獲取到的html標簽對象真實對象類是:

bs.element.Tag

此類對象可以被轉換為列表(list)

但用法上與列表不同。

1.

此類對象不能使用[index]的方式來獲取其內部對象,而轉換成列表後就可以了。

(二)

在beautifulsoup模塊中,html源代碼組織的文檔,任何一個部分都被看作是對象,被完全對象化了!

1.如下Html源代碼片斷:

<div class="post_time_source">

2019-01-11 11:44:49 來源:

<a href="#" id="ne_article_source" rel="nofollow" target="_blank">

知識分子

</a>

</div>

當我取得html標簽對象div的時候(準確的說得到了一個指向div標簽的bs.element.Tag對象。

這個時候,我嘗試使用

html標簽對象.string

屬性取出這個div標簽內含的文本內容(即【2019-01-11 11:44:49 來源:】)

時是取不出來的,因為這個時候:

2019-01-11 11:44:49 來源:

<a href="#" id="ne_article_source" rel="nofollow" target="_blank">知識分子</a>

這兩個內容都被看作了這個div對象的兩個子對象,在這個html標簽對象中沒有任何內含文本。

2.什麽時候才算作一個標簽的內含文本呢?

如下面的標簽內容:

<a href="#" id="ne_article_source" rel="nofollow" target="_blank">

知識分子

</a>

這個a標簽對象是有內含文本的,因為它的內含內容只有文本,沒有其它任何別的對象,只有這種情況下,才算作html標簽對象的內含文本。

這個方面理解起來顯得有些淩亂,因此我準備後續自己封裝一些簡化的函數來進行便於理解的處理。

——————————

今天整理的學習筆記完成,最後例行說明下我的自學思路:

根據過去多年我自學各種編程語言的經歷,認為只有真正體驗式,解決實際問題式的學習才會有真正的效果,即讓學習實際發生。在2004年的時候我開始在一個鄉村小學自學電腦 並學習vb6編程語言,沒有學習同伴,也沒有高師在上,甚至電腦都是孤島(鄉村那時還沒有網絡),有的只是一本舊書,在痛苦的自學摸索中,我找到適應自己零基礎的學習方法:首先是每讀書的一小節就作相應的手寫筆記,第二步就是上機測試每一個筆記內容是否實現,其中會發現書中講的其實有出入或錯誤,第三步就是在上機測試之後,將筆記改為電子版,形成最終的修訂好的正確無誤的學習筆記 。

通過反復嘗試錯誤,在那個沒有分享與交流的黑暗時期我摸黑學會了VB6,爾後接觸了其它語言,也曾聽過付費視頻課程,結果發現也許自己學歷果然太低,就算是零基礎的入門課程,其實也難以跟上進度,講師的教學多數出現對初學者的實際情況並不了解的情況,況且學習者的個體也存在差異呢?當然更可怕的是收費課程的價格往往是自己難以承受的。

於是我的所有編程學習都改為了自學,繼續自己的三步學習筆記法的學習之路。

當然自學的最大問題是會走那麽多的彎路,沒有導師直接輸入式的教學來得直接,好在網絡給我們帶來無限搜索的機會,大家在網絡上的學習日誌帶給我們共享交流的機會,而QQ群等交流平臺、網絡社區的成立,我們可以一起自學,互相批評交流,也可以獲得更有效,更自主的自學成果。

於是我以人生已過半的年齡,決定繼續我的編程自學之路,開始學習python,只希望與大家共同交流,一個人的獨行是可怕的,只有一群人的共同前進才是有希望的。

誠摯期待您的交流分享批評指點!歡迎聯系我加入從零開始的自學聯盟。

這個時代互聯網成為了一種基礎設施的存在,於是本來在孤獨學習之路上的我們變得不再孤獨,因為網絡就是一個新的客廳,我們時刻都可以進行沙龍活動。

非常樂意能與大家一起交流自己自學心得和發現,更希望大家能夠對我學習過程中的錯誤給予指點——是的,這樣我就能有許多免費的高師了——這也是分享時代,社區時代帶來的好福利,我相信大家會的,是吧!

根據完全共享的精神,開源互助的理念,我的個人自學錄制過程是全部按4K高清視頻錄制的,從手寫筆記到驗證手寫筆記的上機操作過程全程錄制,但因為4K高清文件太大均超過5G以上,所以無法上傳至網絡,如有需要可聯系我QQ578652607對傳,樂意分享。上傳分享到百度網盤的只是壓縮後的720P的視頻。

我的學習過程錄像百度盤地址分享如下:(清晰度:1280x720)

鏈接:https://pan.baidu.com/s/1YtLhe9lykfGTLucst2rjvQ

提取碼:9gnw

Bilibili:

https://www.bilibili.com/video/av40497621/

喜馬拉雅語音筆記:

https://www.ximalaya.com/keji/19103006/153543772

孤荷淩寒自學python第七十二天開始寫Python的第一個爬蟲2