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.代码
找到规律后,就可以写代码了。由于使用的是单线程,所以爬数据得到猴年马月了。
# encoding=utf-8
import urllib2
from bs4 import BeautifulSoup
import time
# 返利网值得买页面的源代码中只包含5条数据,
# 其他的数据是动态加载的,每个页面包含50条数据 class FanLi():
def __init__(self):
self.user_agent='Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
self.headers={'User-Agent':self.user_agent}
def get_url(self): list_url=[]
for i in range(1,760):
# 可内容直接获取的url1
url1='http://zhide.fanli.com/p'+str(i)
list_url.append(url1)
for j in range(2,11):
url2='http://zhide.fanli.com/index/ajaxGetItem?cat_id=0&tag=&page='+str(i)+'-'+str(j)+'&area=0&tag_id=0&shop_id=0'
list_url.append(url2)
return list_url
def getHtml(self,url):
# url='http://zhide.fanli.com/p'+str(pageIndex)
try:
request=urllib2.Request(url,headers=self.headers)
response=urllib2.urlopen(request)
html=response.read()
return html
except urllib2.URLError,e:
if hasattr(e,'reason'):
print u"连接失败",e.reason
return None
def parse(self):
urls=self.get_url()
i=0
# with open('zhide.txt',a) as f:
# f.write()
for url in urls:
i=i+1
html=self.getHtml(url)
soup=BeautifulSoup(html,'html.parser')
divs=soup.find_all('div',class_='zdm-list-item J-item-wrap item-no-expired') # for item in divs[0]:
# print 'item'+str(item) for div in divs:
con_list=[]
# 商品名称
title=div.find('h4').get_text()
# 分类
item_type=div.find('div',class_='item-type').a.string
# 推荐人
item_user=div.find('div',class_='item-user').string
# 内容
item_cont=div.find('div',class_='item-content').get_text(strip=True)
# 值得买人数
type_yes=div.find('a',attrs={'data-type':'yes'}).string
# 不值得买人数
type_no=div.find('a',attrs={'data-type':'no'}).string
con_list.append(title)
con_list.append(item_type)
con_list.append(item_user)
con_list.append(item_cont)
con_list.append(type_yes)
con_list.append(type_no) f=open('zhide.txt','a')
for item in con_list:
f.write(item.encode('utf-8')+'|')
f.write('\n')
f.close()
print 'sleeping loading %d'%i
time.sleep(3) zhide=FanLi()
zhide.parse()
python爬取返利网中值得买中的数据的更多相关文章
- python爬取当当网的书籍信息并保存到csv文件
python爬取当当网的书籍信息并保存到csv文件 依赖的库: requests #用来获取页面内容 BeautifulSoup #opython3不能安装BeautifulSoup,但可以安装Bea ...
- 使用python爬取东方财富网机构调研数据
最近有一个需求,需要爬取东方财富网的机构调研数据.数据所在的网页地址为: 机构调研 网页如下所示: 可见数据共有8464页,此处不能直接使用scrapy爬虫进行爬取,因为点击下一页时,浏览器只是发起了 ...
- [转]使用python爬取东方财富网机构调研数据
最近有一个需求,需要爬取东方财富网的机构调研数据.数据所在的网页地址为: 机构调研 网页如下所示: 可见数据共有8464页,此处不能直接使用scrapy爬虫进行爬取,因为点击下一页时,浏览器只是发起了 ...
- python爬取《龙岭迷窟》的数据,看看质量剧情还原度到底怎么样
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:简单 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行 ...
- Python爬取网上车市[http://www.cheshi.com/]的数据
#coding:utf8 #爬取网上车市[http://www.cheshi.com/]的数据 import requests, json, time, re, os, sys, time,urlli ...
- Python爬取散文网散文
配置python 2.7 bs4 requests 安装 用pip进行安装 sudo pip install bs4 sudo pip install requests 简要说明一下bs4的使用因为是 ...
- 利用python爬取贝壳网租房信息
最近准备换房子,在网站上寻找各种房源信息,看得眼花缭乱,于是想着能否将基本信息汇总起来便于查找,便用python将基本信息爬下来放到excel,这样一来就容易搜索了. 1. 利用lxml中的xpath ...
- Python爬取前程无忧网站上python的招聘信息
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 我姓刘却留不住你的心 PS:如有需要Python学习资料的小伙伴可以 ...
- Python 爬取赶集网租房信息
代码已久,有可能需要调整 #coding:utf-8 from bs4 import BeautifulSoup #有这个bs4不用正则也可以定位要爬取的内容了 from urlparse impor ...
随机推荐
- Azure Virtual Machine 之 如何利用Management Class Libraries 创建VM
之前发的blog简单的介绍了如何使用Management Class Libraries 来控制Azure platform. 但由于官方并没有提供文档,所以我们只能够通过自己研究来摸索使用该类库的方 ...
- python处理xml文件
参考:https://docs.python.org/2/library/xml.etree.elementtree.html 例子: <?xml version="1.0" ...
- MVC,MVP 和 MVVM
复杂的软件必须有清晰合理的架构,否则无法开发和维护.MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用.它本身很容易理解,但是要讲清楚,它与衍生的 MVP 和 ...
- poj3253 Fence Repair
http://poj.org/problem?id=3253 Farmer John wants to repair a small length of the fence around the pa ...
- django关系对象映射(Object Relational Mapping,简称ORM)
Model 创建数据库,设计表结构和字段 django中遵循 Code Frist 的原则,即:根据代码中定义的类来自动生成数据库表 from django.db import models clas ...
- esponse.sendRedirect方式的转向与RequestDispatcher的forward方法的比较
esponse.sendRedirect方式的转向与RequestDispatcher的forward方法的比较 JavaWeb开发中,采用MVC模式的时候,在控制器完成模型的调用之后会选择界面对用户 ...
- 一个ubuntu phper的自我修养(lamp)
lamp环境搭建出坑记 lamp虽然大家都懂,但是还是要解释一下先,要做的是一个狭义的解释,以对应我们即将搭建的环境. L指linux(ubuntu). A指apache(apache2). M指my ...
- boost asio sync
Service: #include<boost/asio.hpp> #include<boost/thread.hpp> #include<iostream> #i ...
- strom的使用02
1.grouping分组策略 stream grouping就是用来定义一个stream应该如果分配给Bolts上面的多个Tasks. storm里面有6种类型的stream grouping: 1. ...
- Java开发中经典的小实例-(输入三个数字判断三角形类型)
import java.util.Scanner;public class threeTest { public static void main(String[] args) { ...