先使用以前的方法将返利网的数据爬取下来,scrapy框架还不熟练,明日再战scrapy
查找目标数据使用的是beautifulsoup模块。
1.观察网页,寻找规律
打开值得买这块内容
1>分析数据来源
网页上的数据分为一打开页面就存在的数据(源代码中可以看到的数据),
还有随着鼠标滑动,动态加载的数据(源代码中不显示的数据)。
2>查找规律
加载到最底端后,网页上面一共有50条相关数据,查看源代码,发现只有5条数据的源代码,剩下的数据全部是
动态加载出来的。分析这些动态数据:
F12打开Network这部分,刷新页面,鼠标不往下滑动时,并没有出现我们需要的后面的数据,随着鼠标滑动,
发现两个可能存有数据的项,发现只有AjaxGetItem...这个是我们所需要的,使用filter过滤一下。
过滤后发现如下规律:
1-2是第6-10条,1-3是第11-15条......
其他页也是这个规律,发现第二页中page参数那部分page=0-2,是从0打头的,我换成page=2-2后没有影响
所以规律就是把page部分换成对应的页数就好了。
2.代码
找到规律后,就可以写代码了。由于使用的是单线程,所以爬数据得到猴年马月了,太坑了,惭愧,以后慢慢再改进。
知识还是掌握的太少了,接触到scrapy后,觉得自己对爬虫这部分知道的仍然是冰山一角,什么深度广度,
分布式等等都接触不深,感觉自己太low了,长路漫漫漫,还有觉得scrapy好强,虽然好多用法都不造
1#encoding=utf-82importurllib23frombs4importBeautifulSoup4importtime5#返利网值得买页面的源代码中只包含5条数据,6#其他的数据是动态加载的,每个页面包含50条数据78classFanLi():9def__init__(self):10self.user_agent='Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'11self.headers={'User-Agent':self.user_agent}12defget_url(self):1314list_url=[]15foriinrange(1,760):16#可内容直接获取的url117url1='http://zhide.fanli.com/p'+str(i)18list_url.append(url1)19forjinrange(2,11):20url2='http://zhide.fanli.com/index/ajaxGetItem?cat_id=0&tag=&page='+str(i)+'-'+str(j)+'&area=0&tag_id=0&shop_id=0'21list_url.append(url2)22returnlist_url23defgetHtml(self,url):24#url='http://zhide.fanli.com/p'+str(pageIndex)25try:26request=urllib2.Request(url,headers=self.headers)27response=urllib2.urlopen(request)28html=response.read()29returnhtml30excepturllib2.URLError,e:31ifhasattr(e,'reason'):32PRintu"连接失败",e.reason33returnNone34defparse(self):35urls=self.get_url()36i=037#with open('zhide.txt',a) as f:38#f.write()39forurlinurls:40i=i+141html=self.getHtml(url)42soup=BeautifulSoup(html,'html.parser')43divs=soup.find_all('div',class_='zdm-list-item J-item-wrap item-no-expired')4445#for item in divs[0]:46#print 'item'+str(item)4748fordivindivs:49con_list=[]50#商品名称51title=div.find('h4').get_text()52#分类53item_type=div.find('div',class_='item-type').a.string54#推荐人55item_user=div.find('div',class_='item-user').string56#内容57item_cont=div.find('div',class_='item-content').get_text(strip=True)58#值得买人数59type_yes=div.find('a',attrs={'data-type':'yes'}).string60#不值得买人数61type_no=div.find('a',attrs={'data-type':'no'}).string62con_list.append(title)63con_list.append(item_type)64con_list.append(item_user)65con_list.append(item_cont)66con_list.append(type_yes)67con_list.append(type_no)686970f=open('zhide.txt','a')71foritemincon_list:72f.write(item.encode('utf-8')+'|')73f.write('\n')74f.close()75print'sleeping loading %d'%i76time.sleep(3)7778798081zhide=FanLi()82zhide.parse()
View Code
各种不足之处,还望各位大神指正。