前不久需要一批手機資料做測試,所以就爬取了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...