zoukankan      html  css  js  c++  java
  • python爬取返利网中值得买中的数据

    先使用以前的方法将返利网的数据爬取下来,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.代码

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

     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('
    ')
    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

     

  • 相关阅读:
    UML类图与类的关系详解
    UML用例图总结
    jQuery随机抽取数字号代码
    贪心算法
    回溯法实例详解(转)
    React 表单元素实例
    React 组件嵌套 父子关系
    React 滚动事件
    error: Error trying to parse settings: Unexpected trailing characters in PackagesUserPreferences.sublime-settings:9:2 reloading settings Packages/User/Preferences.sublime-settings
    jquery 下拉框左右选择
  • 原文地址:https://www.cnblogs.com/RoundGirl/p/4940981.html
Copyright © 2011-2022 走看看