对于页面的抓取,我们使用的是requests,现在大部分的网站都支持动态加载,我们在firefox f12后查找动态的url :http://www.meilishuo.com/aj/shop_list/goods?frame=1&page=0&shop_id=1001072849,这里的frame是变化的,因此我们只需要请求该网址即可,在请求的header中出现nt 参数,而且nt参数是变化的,我们猜测这可能是随时间变化的,而且是有有效期的;我们的工作是如何取得第一次的nt值?我们在访问http://www.meilishuo.com/shop/1001072849 返回的页面中找到了nt的值,ok 工作顺利解决

#-*- coding:utf-8 -*-
import re
import requests
import codecs
import simplejson if __name__=="__main__":
session=requests.Session()
search_header={'Host':'www.meilishuo.com',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0',
'Accept':'application/json, text/javascript, */*; q=0.01',
'Accept-Language':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Accept-Encoding':'gzip, deflate',
'X-Requested-With':'XMLHttpRequest',#异步加载ajax
'Referer':'http://www.meilishuo.com/shop/1001072849',
'Connection':'keep-alive'}
response=requests.get('http://www.meilishuo.com/shop/1001072849?frm=rate_to_shop') info=re.search('\"nt\":\"(.+?)\",',response.content)
search_header['nt']=info.group(1)#在header中增加nt选项
info1=re.search('<script>Meilishuo.config.poster0 = (.+?);fml.vars.notFluid = true;</script>',response.content)#取得静态页面的info
b=simplejson.loads(info1.group(1))
totalNum = b['totalNum']#取得页数
page = int(totalNum)/20
for i in range(page+1):
a=requests.get('http://www.meilishuo.com/aj/shop_list/goods?frame='+str(i)+'&page=0&shop_id=1001072849',headers=search_header)
print a.headers
j_a=simplejson.loads(a.content)
print len(j_a['tInfo'])

未完待续,接下来的就是要把宝贝的url保存下来并保存为为本地图片

for key in j_a['tInfo']:
                r=requests.get(key['goods_img'])
                with open(key['goods_title']+".jpg","wb") as title:
                        title.write(r.content)

最新文章

  1. 23种设计模式--中介者模式-Mediator Pattern
  2. 【iCore3应用开发平台】发布 iCore3 应用开发平台使用说明
  3. Hibernate中的一对多与多对一映射
  4. ADF_Advanced ADF系列1_Fusion应用的客制和个性化(Part1)
  5. jquery优化28个建议
  6. oracle2
  7. [转] ubuntu 12.04 安装 nginx+php+mysql web服务器
  8. 提升升级 强制更新 Download
  9. 试用mysql的infobright引擎
  10. iOS开发技巧 -- 复用代码片段
  11. mysql中timestamp的自动生成与更新
  12. vmware克隆之后网卡起不来的问题
  13. nginx插入lua脚本访问redis
  14. HTTP协议 - 使用php模拟get/post请求
  15. c++线程池小例子
  16. 【做题】SDOI2017苹果树——dfs序的运用
  17. linux timing profile
  18. JUnit+Mockito结合测试Spring MVC Controller
  19. Python: 字典应用题
  20. android 线程中断的处理

热门文章

  1. 用GetTickCount()计算一段代码执行耗费的时间的小例子
  2. mongo的时间类型,erlang中对其的处理
  3. 膨胀和腐蚀 - cvErode() 和 cvDilate() 函数实现
  4. java 发展简史
  5. ASP.NET动态网站制作(0)
  6. HDU 1853 Cyclic Tour[有向环最小权值覆盖]
  7. mysql批量插入测试数据
  8. cocos2d-x中对象的位置,旋转,缩放
  9. ftl总结
  10. 解决使用mybatis做批量操作时发生的异常:Parameter &#39;__frch_item_0&#39; not found. Available parameters are [list] 记录