python3 爬蟲新手筆記(三) 資訊類網頁爬取

2021-09-12 12:25:14 字數 4562 閱讀 3906

def

start_requests

(self)

:return

[request(

, callback=self.parse_article)

]#列表的第一頁有一篇文章,將這篇文章也爬取下來

deffirst_page

(self, response):)

#通過response得到該頁面的html文字和url位址

item[

'html'

]= response.body

item[

'url'

]= response.url

....

..#print(item)

yield item

blocks = response.xpath(

'.//div[@class="block-article bdaiafadein"]'

)for block in blocks:

article_href = block.xpath(

'article/header/h2[@class="entry-title"]/a/@href'

).extract_first(

)if article_href is

notnone

:yield request(article_href, callback=self.parse_article)

div_pagination = response.xpath(

'.//div[@class="bdaia-pagination"]'

)if div_pagination is

notnone

: childs = div_pagination.xpath(

'*')

child_count =0;

for child in childs:

child_class = child.xpath(

'@class'

).extract_first(

) child_count +=

1if child_class==

'current'

:break

next_page_href = childs[child_count]

.xpath(

'@href'

).extract_first(

)print

(next_page_href)

if next_page_href is

notnone

:yield request(next_page_href, callback=self.article_list)

defarticle_list

(self, response):.

....

.#爬取具體文章

defparse_article

(self, response):)

item[

'html'

]= response.body

item[

'url'

]= response.url

.....

. post_content = response.xpath(

'.//div[@class="bdaia-post-content"]'

)if post_content is

notnone

: content_list =

first_div = post_content.xpath(

'div[1]'

)if first_div is

notnone

: pronest(content_list, first_div)

#'*'得到該節點的所有元素節點

childs = post_content.xpath(

'*')

for child in childs[2:

]:#呼叫遞迴結構處理

pronest(content_list, child)

""" print("attrs: ")

attrs = child.xpath('.//@href | .//@src')

for attr in attrs:

print(attr)

"""item[

'content'

]= content_list

#print("content:", content_list)..

....

yield item

#遞迴結構

defpronest

(text, selector)

:#'node()'得到該節點的所有節點,與'*'不同,包含純文字之類的

childs = selector.xpath(

'node()'

)for child in childs:

#'name()'得到該節點的名稱

child_name = child.xpath(

'name()'

).extract_first(

)#如果名稱為空是純文字,直接提取內容

if child_name is

none

: text_content = child.extract()if

len(text_content)==0

:continue

#print(text_content)

#如果是img、iframe、a、link或其他節點

else

:if child_name==

'img'

: img_content =

"+ child.xpath(

'@src'

).extract_first()+

"" img_text = child.xpath(

'text()'

).extract_first(

)if img_text is

notnone

: img_content += img_text

#print(img_content)))

elif child_name==

'iframe'

: iframe_content =

""+ child.xpath(

'@src'

).extract_first()+

"" iframe_text = child.xpath(

'text()'

).extract_first(

)if iframe_text is

notnone

: iframe_content += iframe_text

#print(iframe_content)))

elif child_name==

'a':

a_content =

""+ child.xpath(

'@href'

).extract_first()+

"" a_text = child.xpath(

'text()'

).extract_first(

)if a_text is

notnone

: a_content += a_text

#print(a_content)))

elif child_name==

'link'

: link_content =

""+ child.xpath(

'@href'

).extract_first()+

"" link_text = child.xpath(

'text()'

).extract_first(

)if link_text is

notnone

: link_content += link_text

#print(link_content)))

#節點的子節點中可能含有img、iframe、a、link

else

: links = child.xpath(

'.//a | .//link'

) srcs = child.xpath(

'.//img | .//iframe'

)#如果沒有img、iframe、a、link節點,直接提取內容;否則遞迴

iflen

(links)==0

andlen

(srcs)==0

: content = child.xpath(

'.//text()'

).extract()if

len(content)==0

:continue

#print(content)

text += content

else

: pronest(text, child)

python3爬蟲筆記

請求 並提取 資料的 自動化 程式 發起請求 獲取響應內容 解析文字內容 儲存資料 1.瀏覽器傳送資訊給該 所在的伺服器,這個過程叫做http request。2.服務收到瀏覽器傳送的訊息後,能夠根據瀏覽器傳送訊息的內容,做相應的處理,然後把訊息回傳給瀏覽器。這個過程叫做http response。...

python3爬蟲學習筆記

爬蟲爬取京東某手機頁面 beautifulsoup 原文記錄內容太多現進行摘錄和分類 pip3 install jieba kou ubuntu python cat clahamlet.py usr bin env python coding utf 8 e10.1calhamlet.py def...

Python3爬蟲學習筆記1 0 什麼是爬蟲?

我們來思考乙個問題,什麼是爬蟲?說一下我對爬蟲的理解。理解爬蟲之前,我們思考一下網路是一種什麼樣式的存在。爬蟲就是游離在這些網路之間的乙個自動化程式,並且能夠完成對網路地瀏覽,自動採集網路中所有訪問到的內容 從而在網路中得到你需要的資訊。網路蜘蛛 爬蟲 維基百科 順便說一句 google是世界上最大...