python爬取返利網中值得買中的數據

先使用之前的方法將返利網的數據爬取下來,scrapy框架還不熟練,明日再戰scrapyhtml

查找目標數據使用的是beautifulsoup模塊。ajax

1.觀察網頁,尋找規律app

打開值得買這塊內容框架

1>分析數據來源scrapy

網頁上的數據分爲一打開頁面就存在的數據(源代碼中能夠看到的數據),ide

還有隨着鼠標滑動,動態加載的數據(源代碼中不顯示的數據)。url

2>查找規律spa

加載到最底端後,網頁上面一共有50條相關數據,查看源代碼,發現只有5條數據的源代碼,剩下的數據所有是線程

動態加載出來的。分析這些動態數據:3d

F12打開Network這部分,刷新頁面,鼠標不往下滑動時,並無出現咱們須要的後面的數據,隨着鼠標滑動,

發現兩個可能存有數據的項,發現只有ajaxGetItem...這個是咱們所須要的,使用filter過濾一下。

過濾後發現以下規律:

 1-2是第6-10條,1-3是第11-15條......

其餘頁也是這個規律,發現第二頁中page參數那部分page=0-2,是從0打頭的,我換成page=2-2後沒有影響

因此規律就是把page部分換成對應的頁數就行了。

2.代碼

找到規律後,就能夠寫代碼了。因爲使用的是單線程,因此爬數據獲得猴年馬月了。

 1 # encoding=utf-8
 2 import urllib2  3 from bs4 import BeautifulSoup  4 import time  5 # 返利網值得買頁面的源代碼中只包含5條數據,
 6 # 其餘的數據是動態加載的,每一個頁面包含50條數據
 7 
 8 class FanLi():  9     def __init__(self): 10         self.user_agent='Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
11         self.headers={'User-Agent':self.user_agent} 12     def get_url(self): 13 
14         list_url=[] 15         for i in range(1,760): 16             # 可內容直接獲取的url1
17            url1='http://zhide.fanli.com/p'+str(i) 18  list_url.append(url1) 19            for j in range(2,11): 20                url2='http://zhide.fanli.com/index/ajaxGetItem?cat_id=0&tag=&page='+str(i)+'-'+str(j)+'&area=0&tag_id=0&shop_id=0'
21  list_url.append(url2) 22         return list_url 23     def getHtml(self,url): 24         # url='http://zhide.fanli.com/p'+str(pageIndex)
25         try: 26             request=urllib2.Request(url,headers=self.headers) 27             response=urllib2.urlopen(request) 28             html=response.read() 29             return html 30         except urllib2.URLError,e: 31             if hasattr(e,'reason'): 32                 print u"鏈接失敗",e.reason 33                 return None 34     def parse(self): 35         urls=self.get_url() 36         i=0 37         # with open('zhide.txt',a) as f:
38         # f.write()
39         for url in urls: 40             i=i+1
41             html=self.getHtml(url) 42             soup=BeautifulSoup(html,'html.parser') 43             divs=soup.find_all('div',class_='zdm-list-item J-item-wrap item-no-expired') 44 
45             # for item in divs[0]:
46             # print 'item'+str(item)
47 
48             for div in divs: 49                 con_list=[] 50                 # 商品名稱
51                 title=div.find('h4').get_text() 52                 # 分類
53                 item_type=div.find('div',class_='item-type').a.string 54                 # 推薦人
55                 item_user=div.find('div',class_='item-user').string 56                 # 內容
57                 item_cont=div.find('div',class_='item-content').get_text(strip=True) 58                 # 值得買人數
59                 type_yes=div.find('a',attrs={'data-type':'yes'}).string 60                 # 不值得買人數
61                 type_no=div.find('a',attrs={'data-type':'no'}).string 62  con_list.append(title) 63  con_list.append(item_type) 64  con_list.append(item_user) 65  con_list.append(item_cont) 66  con_list.append(type_yes) 67  con_list.append(type_no) 68 
69 
70                 f=open('zhide.txt','a') 71                 for item in con_list: 72                     f.write(item.encode('utf-8')+'|') 73                 f.write('\n') 74  f.close() 75             print 'sleeping loading %d'%i 76             time.sleep(3) 77 
78 
79 
80 
81 zhide=FanLi() 82 zhide.parse()
View Code
相關文章
相關標籤/搜索