设为首页 收藏本站
查看: 1606|回复: 0

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

[复制链接]

尚未签到

发表于 2015-11-29 16:15:32 | 显示全部楼层 |阅读模式
  先使用以前的方法将返利网的数据爬取下来,scrapy框架还不熟练,明日再战scrapy
  查找目标数据使用的是beautifulsoup模块。
  1.观察网页,寻找规律
  打开值得买这块内容
  1>分析数据来源
  网页上的数据分为一打开页面就存在的数据(源代码中可以看到的数据),
  还有随着鼠标滑动,动态加载的数据(源代码中不显示的数据)。
  2>查找规律
  加载到最底端后,网页上面一共有50条相关数据,查看源代码,发现只有5条数据的源代码,剩下的数据全部是
  动态加载出来的。分析这些动态数据:
  F12打开Network这部分,刷新页面,鼠标不往下滑动时,并没有出现我们需要的后面的数据,随着鼠标滑动,
  发现两个可能存有数据的项,发现只有ajaxGetItem...这个是我们所需要的,使用filter过滤一下。
   DSC0000.png
  过滤后发现如下规律:
   DSC0001.png
   1-2是第6-10条,1-3是第11-15条......
   DSC0002.png
  其他页也是这个规律,发现第二页中page参数那部分page=0-2,是从0打头的,我换成page=2-2后没有影响
  所以规律就是把page部分换成对应的页数就好了。
  2.代码
  找到规律后,就可以写代码了。由于使用的是单线程,所以爬数据得到猴年马月了,太坑了,惭愧,以后慢慢再改进。
  知识还是掌握的太少了,接触到scrapy后,觉得自己对爬虫这部分知道的仍然是冰山一角,什么深度广度,
  分布式等等都接触不深,感觉自己太low了,长路漫漫漫,还有觉得scrapy好强,虽然好多用法都不造


DSC0003.gif DSC0004.gif


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   各种不足之处,还望各位大神指正。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-145048-1-1.html 上篇帖子: python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法 下篇帖子: pylab.show()没有显示图形图像(python的matplotlib画图包)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表