Scrapy爬蟲抓取ZOL手機詳情

2021-09-24 11:36:19 字數 3960 閱讀 8492

前不久需要一批手機資料做測試,所以就爬取了zol上關於手機的各項引數,現在把**分享出來,希望大家能夠多提改進意見。

想要抓取zol關於手機的資訊需要三個步驟:

手機**列表頁 —》單個手機詳情頁 ----》當前手機更多詳情頁面

# -*- coding: gbk -*-

from scrapy.spiders import crawlspider

import scrapy

from urllib.parse import urljoin

class

phonespider

(crawlspider)

: name =

"phone"

allowed_domains =

["detail.zol.com.cn"

]def

start_requests

(self)

:for i in

range(30

):yield scrapy.request(

''+str

(i +1)

+'.html'

, self.parse,

dont_filter=

true

)def

parse

(self, response)

:# 手機**列表頁

phone_plane = response.css(

'div.pic-mode-box'

) phone_list = phone_plane.css(

'ul li'

)for phone in phone_list:

phone = phone.css(

'h3 a[href]'

) phone_url = phone.css(

'a::attr(href)'

).extract_first(

) phone_title = phone.css(

"a::attr(title)"

).extract_first(

) next_url = urljoin(response.url, phone_url)

yield scrapy.request(next_url, self.get_phone_page, dont_filter=

false

, meta=

)def

get_phone_page

(self, response)

:# 單個手機詳情頁

section_vec = response.css(

'div.section div.section-content'

) next_a = section_vec.css(

'a._j_mp_more'

) detail_url = next_a.css(

'a::attr(href)'

).extract_first(

) next_url = urljoin(response.url, detail_url)

yield scrapy.request(next_url, self.get_details, dont_filter=

false

, meta=

)def

get_details

(self, response)

:# 當前手機更多詳情頁面

title = response.meta[

'title'

] all_content = response.css(

'div.detailed-parameters'

) all_content = all_content.css(

'tr'

) detail_list =[''

for i in

range(8

)]for content in all_content:

# detail = content.css('th')

if content.css(

'th a'):

detail_name = content.css(

'th a ::text'

).extract_first(

)else

: detail_name = content.css(

'th ::text'

).extract_first(

)if content.css(

'td a'):

detail_content = content.css(

'td a ::text'

).extract_first(

)else

: detail_content = content.css(

'td ::text'

).extract_first(

)if detail_name ==

'上市日期'

: detail_list[0]

= detail_content.replace(

',',

';')

elif detail_name ==

'出廠系統核心'

: detail_list[1]

= detail_content.replace(

',',

';')

elif detail_name ==

'主屏解析度'

: detail_list[2]

= detail_content.replace(

',',

';')

elif detail_name ==

'cpu型號'

: detail_list[3]

= detail_content.replace(

',',

';')

elif detail_name ==

'gpu型號'

: detail_list[4]

= detail_content.replace(

',',

';')

elif detail_name ==

'電池容量'

: detail_list[5]

= detail_content.replace(

',',

';')

elif detail_name ==

'質保時間'

: detail_list[6]

= detail_content.replace(

',',

';')

elif detail_name ==

'手機重量'

: detail_list[7]

= detail_content.replace(

',',

';')

write_line = title +

','+

(","

.join(detail_list)

)with

open

('phone_details.csv'

,'a'

)as f:

f.write(write_line +

'\n'

) f.close(

)print

('write : '

+ write_line)

python抓取zol付費桌布

僅限技術交流,禁止任何商業用途 學習了jack cui的爬蟲文章,頗有收穫。拿來練練手。點開第一張桌布 用到的兩個重要庫 selenium 和beautifulsoup,對庫不熟悉的,建議看學習一下。當乙個圖集結束時,再點下一張是會異常的,因為此時,控制項是不可見狀態的。這時候,繼續分析網頁 可以發...

Python爬蟲框架 scrapy抓取40W部落格

單純的從每個欄目去爬取是不顯示的,轉換一下思路,看到搜尋頁面,有時間 有時間!注意看url鏈結 頁面搜尋的時候因為加了驗證,所以你必須要獲取到你本地的cookie,這個你很容易得到 字典生成器的語法是時候去複習一下了 import scrapy from scrapy import request,...

scrapy爬蟲實戰 抓取NBA吧的內容

6 debug 7 資料存入資料庫 進入之前以及搭建好的虛擬環境 在anaconda的shell中輸入下面格式 scrapy shell 要爬取的 進入貼吧頁面的開發者模式 在瀏覽器上按f12 分析標籤 再次進入shell檢視需要的資料,同時觀察資料特徵 頁面中帖子的url位址 url list r...