转载

python爬取返利网中值得买中的数据(v1单线程,非scrapy框架)

先使用以前的方法将返利网的数据爬取下来,scrapy框架还不熟练,明日再战scrapy

查找目标数据使用的是beautifulsoup模块。

1.观察网页,寻找规律

打开值得买这块内容

1>分析数据来源

网页上的数据分为一打开页面就存在的数据(源代码中可以看到的数据),

还有随着鼠标滑动,动态加载的数据(源代码中不显示的数据)。

2> 查找规律

加载到最底端后,网页上面一共有50条相关数据,查看源代码,发现只有5条数据的源代码,剩下的数据全部是

动态加载出来的。分析这些动态数据:

F12打开Network这部分,刷新页面,鼠标不往下滑动时,并没有出现我们需要的后面的数据,随着鼠标滑动,

发现两个可能存有数据的项,发现只有ajaxGetItem...这个是我们所需要的,使用filter过滤一下。

python爬取返利网中值得买中的数据(v1单线程,非scrapy框架)

过滤后发现如下规律:

python爬取返利网中值得买中的数据(v1单线程,非scrapy框架)

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

python爬取返利网中值得买中的数据(v1单线程,非scrapy框架)

其他页也是这个规律,发现第二页中page参数那部分page=0-2,是从0打头的,我换成page=2-2后没有影响

所以规律就是把page部分换成对应的页数就好了。

2.代码

找到规律后,就可以写代码了。由于使用的是单线程,所以爬数据得到猴年马月了,太坑了,惭愧,以后慢慢再改进。

知识还是掌握的太少了,接触到scrapy后,觉得自己对爬虫这部分知道的仍然是冰山一角,什么深度广度,

分布式等等都接触不深,感觉自己太low了,长路漫漫漫,还有觉得scrapy好强,虽然好多用法都不造

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

各种不足之处,还望各位大神指正。

正文到此结束
Loading...