今天給大家分享一個小網站的數據采集,并寫到excel里面!
分析網站
目標網站是“小咪購”,這里有天貓所有的含有購物券的商品信息,我們今天就來抓它吧!
隨便找一段文字,然后點擊右鍵查看網頁源代碼,看看是否存在該文字,如果存在,那么這個網頁就是靜態網站了!很幸運,這個網站居然是靜態的。
那就簡單了,不需要去分析ajax加載數據或者找json包了,直接獲取網頁源代碼==>>匹配相關內容==>>保存數據即可!
工具和庫
Windows+python3.6
import random
import time
import requests
from lxml import etree
import xlwt
用這幾個庫就可以搞定了!注意xlwt和xlrd這2個庫都是操作excel的,一個是保存數據,一個是讀取數據,不要搞混了。
開始寫代碼
首先寫一個函數,將所有的爬蟲工作寫到函數里,如下圖
這個網站需要寫上headers,不寫是抓不到數據的!新建一個列表,將爬到的相關數據寫入列表,它的形式大概是這樣的:【【產品信息A1,2,3……】,【產品信息B1,2,3……】……】,這么寫列表是因為我們后要將他們寫如excel表格,那么列表中的每一個元素(還是列表形式)都是一行數據,方便寫入!
注意第33行,列表構成的時候,用+連接會將所有列表中的元素放入一個列表,比如:【1,2,3】+【4,5】=【1,2,3,4,5】,而用append()函數則會將后面的內容作為一個元素加入列表中,比如:[1,2,3].append([4,5])=[1,2,3,[4,5]]
下來就是寫入excel了,首先是新建excel表格,并寫入行數據
wb = xlwt.Workbook(encoding='utf-8')
ws = wb.add_sheet('優惠券')
path = 'E://python//優惠券.xls' head = ['序號','商品類型','商品名稱','優惠券','券后價','在售價','銷量','推薦理由','商品鏈接'] for i in range(9):
ws.write(0,i,head[i])
后面的數據,依次按格式寫入并后用wb.save(路徑)的方式保存即可!完整代碼及效果如下
import random import time import requests from lxml import etree import xlwt def main(line = 1): headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'}
url = 'http://www.hlxns.com' html = requests.get(url, headers=headers)
html.encoding = 'utf-8' page = etree.HTML(html.text).xpath('//a[@class="item"]/text()')[-1] for i in range(int(line/100)+1, int(page) + 1):
k = 1 lis = []
print('【開始下載】第%d頁數據'%i)
htm = requests.get(url + '/index.php?r=l&page={}'.format(str(i)), headers=headers)
htm.encoding = 'utf-8' data = etree.HTML(htm.text)
url_sps = data.xpath('//div[@class="title"]/a/@href') for url_sp in url_sps: time.sleep(random.random()*2)
print(' 【正在下載】第%03d頁第%03d條商品數據'%(i,k),end='')
k += 1 html_sp = requests.get(url + url_sp, headers=headers)
html_sp.encoding = 'utf-8' info = etree.HTML(html_sp.text)
title = info.xpath('//span[@class="title"]/text()') summary = [x.replace('推薦理由:','') for x in info.xpath('//span[@class="theme-color-3"]/text()')] category = info.xpath('//div[@class="nav-wrap"]/div/a[3]/text()') now_price = info.xpath('//span[@class="now-price"]/b[2]/i/text()') old_price = info.xpath('//span[@class="org-price"]/i/text()') nums = info.xpath('//div[@class="text-wrap"]/span[2]/i/text()') coupon = info.xpath('//div[@class="buy-coupon theme-color-8"]/span/b/text()') sp_url = info.xpath('//a[@class="theme-bg-color-8"]/@href') lis.append(category+title+coupon+now_price+old_price+nums+summary+sp_url)
print('................................【下載完成】')
print('######第%d頁數據 【下載完成】'%i) for ii in range(len(lis)):
lis[ii].insert(0, line) for j in range(9): ws.write(line, j, lis[ii][j])
line += 1 print('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>【寫入本頁數據完成】<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<')
wb.save(path) if __name__ == '__main__':
wb = xlwt.Workbook(encoding='utf-8')
ws = wb.add_sheet('優惠券')
path = 'E://python//優惠券.xls' head = ['序號','商品類型','商品名稱','優惠券','券后價','在售價','銷量','推薦理由','商品鏈接'] for i in range(9):
ws.write(0,i,head[i])
main()
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
-
50
-
51
-
52
-
53
-
54
-
55
由于網站更新的很快(官方說是10分鐘。。。),所以也沒有抓取那么多,所有的頁面有大約600多頁,一頁100條信息,也就是說一共有6萬多條商品信息,如果不用多線程的話會很慢!
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。