淘宝网上有很多商品,这些商品的信息就是一个很不错的数据来源,于是我参考资料后依葫芦画瓢弄了一个爬虫程序来爬一爬梦寐以求的电钢琴。
声明一下:电钢琴和电子琴是两种不同的琴,我在正则表达式里面设置了只要含有电子琴这个词语一律不抓取。同时淘宝商家的很多商品栏都是重复的,不加筛选前,我抓了1300个数据,其实只有40个左右不重复的数据。必须加名称不重复的筛选。
最近学了selenium,这个Python库可以用来模拟浏览器行为,我觉得这个库操作起来思路很清晰,就和人一样点击,下拉,只不过我们平常的这些动作对于程序就变成了一行行代码来去指示完成。
我针对了罗兰和雅马哈两个品牌进行了一定的分析,分别搜索“罗兰电钢琴”,“雅马哈电钢琴”分别得到了罗兰的全部数据,和雅马哈的前55页数据(综合排序下)。并且把这一部分数据保存到了mongoDB非关系型数据库里面。
如下图:
雅马哈电钢琴集合
罗兰电钢琴集合
然后呢,再通过左上角工具栏collection->export collecction进行导出,导出为csv文件,之后再用excel表格打开,就变成了下面这样的表格。
罗兰电钢琴抓取到了35个数据,雅马哈抓取到了60个数据,不筛选之前罗兰电钢琴30页有1300个数据,其实我仔细一看全是重复的,淘宝商家一样的东西挂了好几个商品栏,于是加了名称不重复筛选,结果只有35个。淘宝商家好样的。。。
我把数据都放过来了,大家如果有想买的可以简单参考一下。
罗兰电钢琴的数据
SUM是总交易额,这里顺便说一下,淘宝的付款人数是从当日往前推30天,就是近一个月。
我是按交易量来排序的。
4028410
SUM
price
deal
title
shop
location
843500
3500
241
Roland罗兰电钢琴FP-30FP30智能数码电钢88键重锤电子钢琴
爱乐乐器专营店
广东深圳
297500
3500
85
Roland罗兰电钢琴FP30智能数码88键重锤便携成人电子钢琴FP-30
roland罗兰皮优专卖店
北京
290500
3500
83
Roland罗兰fp30电钢琴数码钢琴88键重锤F20成人儿童仿真钢FP30
艾威乐器专营店
上海
189000
3500
54
Roland罗兰fp30电钢琴88键重锤专业成人家用初学者数码电子钢琴
律动乐器专营店
北京
248160
5280
47
Roland罗兰电钢琴RP102RP-302/501智能电钢成人初学数码钢琴
爱乐乐器专营店
广东深圳
237600
5280
45
Roland罗兰电钢琴rp102/302/50188键重锤专业成人初学者家用钢琴
roland罗兰皮优专卖店
北京
140000
3500
40
Roland罗兰电钢琴FP-30FP3088键重锤电子钢琴成人家用
roland罗兰悦聆专卖店
上海
175200
4380
40
Roland罗兰电钢琴RP30智能88键重锤智能成人儿童通用电子钢琴
君思乐器专营店
上海
129500
3500
37
罗兰电钢琴RolandFP30FP-30成人入门专业88键重锤数码电子电钢
世纪音缘乐器专营店
北京
108500
3500
31
Roland罗兰电钢琴FP30FP-30数码智能钢琴88键重锤成人电子钢琴
启源乐器专营店
广东广州
173710
5990
29
ROLAND罗兰电钢琴F140RRP102RP302RP501R88键重锤数码电钢琴
roland罗兰悦聆专卖店
上海
189360
7890
24
ROLAND罗兰电钢琴HP504HP603HP60588键重锤数码钢琴电钢琴
roland罗兰悦聆专卖店
上海
87600
4380
20
罗兰电钢琴88键重锤RP30专业数码钢琴成人电子钢琴初学者考级家用
和雅乐器专营店
广东深圳
61180
3220
19
ROLAND罗兰XPS10XPS30XPS-1030电子合成器61键电子琴编曲键盘
罗兰超音专卖店
广东深圳
95040
5280
18
Roland罗兰电钢琴RP30/RP102/RP501R蓝牙88键重锤智能电子钢琴
罗兰大佰专卖店
江苏南通
89760
5280
17
Roland罗兰电钢琴rp102/302/50188键重锤智能数码钢琴成人
罗兰超音专卖店
广东深圳
102570
7890
13
Roland罗兰高端电钢琴HP504HP605HP603电钢琴88键重锤家用
roland罗兰皮优专卖店
北京
151800
13800
11
吧主信誉罗兰ROLANDHP603ADP603重锤智能电钢琴数码钢琴
关维厚
北京
43800
4380
10
Roland罗兰电钢琴RP30RP-30数码智能钢琴88键重锤成人电子钢琴
启源乐器专营店
广东广州
47920
5990
8
Roland罗兰电钢琴RP302智能数码88键重锤带琴盖专业成人家用
知音乐器专营店
上海
55230
7890
7
顺丰Roland罗兰电钢琴HP504603605数码钢琴88键重锤电子钢琴
爱乐乐器专营店
广东深圳
21120
5280
4
吧主信誉ROLAND罗兰RP-102电钢琴RP102卡哇伊KDP110
关维厚
北京
21120
5280
4
Roland罗兰电钢琴rp102/302/50188键重锤专业成人初学者家用钢
和雅乐器专营店
广东深圳
23960
5990
4
ROLAND罗兰电钢琴RP102RP302RP501RF140R88键重锤数码电钢琴
聆悦乐器专营店
上海
10500
3500
3
Roland罗兰电钢琴FP30FP-30智能数码88键成人家用初学者电子钢琴
瑞立乐器专营店
上海
13140
4380
3
Roland罗兰电钢琴88键重锤rp30RP102专业成人初学家用电子电钢
世纪音缘乐器专营店
北京
24870
8290
3
Roland罗兰FP-60FP-90电钢琴FP60FP90数码钢琴蓝牙88键重锤麦克风
关维厚
北京
7000
3500
2
罗兰电钢琴FP30智能数码钢琴88键重锤电子钢琴成人儿童初学fp-30
扬威乐器专营店
浙江嘉兴
7000
3500
2
罗兰电钢琴RolandFP-30数码电子钢琴88键重锤进口蓝牙智能fp30
郑州豫华乐器专营店
河南郑州
10560
5280
2
Roland罗兰电钢琴RP102智能数码电子钢琴88键F140R初学家用RP302
艾威乐器专营店
上海
10560
5280
2
Roland罗兰电钢琴RP102RP302RP501立式数码钢琴88键重锤电钢
律动乐器专营店
北京
10560
5280
2
ROLAND罗兰电钢琴RP501RHP504数码电钢琴88键重锤RP302RP102
艾威乐器专营店
上海
11980
5990
2
罗兰电钢琴RolandRP-501R成人专业家用88键重锤电子电钢RP302
世纪音缘乐器专营店
北京
3500
3500
1
Roland/罗兰电钢琴FP3088键重锤智能电子钢琴成人家用
聆悦乐器专营店
上海
3500
3500
1
ROLAND罗兰电钢琴fp30智能数码电钢琴88键重锤专业成人罗兰fp30
龙圣乐器专营店
江苏南京
5280
5280
1
Roland罗兰电钢琴RP-102RP-302数码智能钢琴
启源乐器专营店
广东广州
5280
5280
1
罗兰RolandRP102RP302RP501RF-140R配重数码立式电钢琴
音域乐器专营店
广东广州
5990
5990
1
罗兰RP302Roland电钢琴智能数码钢琴88键重锤包邮
天堂鸟乐器专营店
陕西西安
6980
6980
1
Roland罗兰电钢琴F140RF-140R数码智能钢琴88键重锤电子钢琴
启源乐器专营店
广东广州
7890
7890
1
Roland罗兰高端电钢琴HP504HP603HP605电钢琴88键重锤数码钢琴
众乐乐器
湖北武汉
8290
8290
1
Roland罗兰电钢琴FP60/FP90便携式舞台钢琴成人专业智能电钢琴
roland罗兰皮优专卖店
北京
9900
9900
1
ROLAND罗兰F-130RFP-50FP-80HP-506HP-508RW数码电子钢琴电钢
espm2
江苏南京
14000
14000
1
Roland罗兰电钢琴FP-90fp90电钢琴FP-60舞台数码电钢88键重锤
爱乐乐器专营店
广东深圳
14000
14000
1
Roland罗兰电钢琴FP-90FP60电钢琴FP-50舞台数码电钢88键重锤
罗兰超音专卖店
广东深圳
14000
14000
1
顺丰Roland罗兰电钢琴FP-90fp90电钢琴舞台数码电钢88键重锤
亚伦乐器专营店
北京
0
3490
0
罗兰mp100mp-100电钢琴电钢Roland数码钢琴电子钢琴
博联盛艺乐器商城
北京
0
3490
0
实体现货罗兰ROland新款电钢琴MP100MP100秒P105PX150包邮
广州两小节乐器
广东广州
0
3500
0
Roland罗兰FP-30FP30智能数码电子钢琴88键重锤蓝牙智能款FP30
roland_bj
北京
0
4000
0
二手电钢琴原装日本罗兰ROLANDFP-288键进口电子钢琴键盘琴
爱笛声琴行
上海
0
4980
0
新款ROLAND罗兰电子数码钢琴RP-501R88键重锤电钢琴RP301升级302
龙圣乐器专营店
江苏南京
0
5980
0
现货罗兰电钢琴RP-401R电子钢琴88键重锤数码钢琴RP301升级电钢
海都乐器企业店
四川成都
0
5990
0
罗兰Roland电钢琴RP501R/RP-302电子数码钢琴88键重锤电钢包邮
蒙特丽乐器专营店
上海
0
7300
0
Roland/罗兰电钢琴RP401R数码钢琴88键重锤电子钢琴
wdmzsytl
北京
0
19800
0
RolandRD-300NXRD-800RD-2000罗兰电钢琴舞台数码钢琴
讴唱乐器专营店
福建厦门
0
19800
0
【乐音中国】Roland/罗兰电钢琴RD-2000舞台便携88键盘重锤RD2000
musicpcm
北京
0
19800
0
日产罗兰RolandRD-300NX/2000V-PIANO88键盘数码舞台电钢琴
音域乐器专营店
广东广州
0
22800
0
罗兰RolandLX-17LX-7舞台电钢琴88键数码钢琴lx17lx7新款
亚伦乐器专营店
北京
0
22800
0
现货Roland罗兰LX-1788键rolandlx-7舞台电钢琴LX17数码钢琴
roland罗兰右任之声专卖店
北京
0
39800
0
RolandV-Piano罗兰家庭/舞台电子数码钢琴正品包邮
讴唱乐器专营店
福建厦门
0
128000
0
Roland罗兰电钢琴GP-7三角钢琴V-PianoGrand88键重锤数码钢琴
众乐乐器
湖北武汉
4028410
下面这个是雅马哈电钢琴的交易记录
SUM
price
deal
title
shop
location
2858289
3117
917
雅马哈电钢琴P-125B/115WH电子数码钢琴成人初学专业88键重锤电钢
yamaha雅马哈艺可专卖店
上海
3690431
4799
769
顺丰YAMAHA雅马哈YDP103R数码88键重锤带盖进口立式智能电子钢琴
yamaha雅马哈大佰专卖店
江苏南通
233775
3117
75
新品雅马哈P-125B125WH成人儿童88键重锤数码电子钢琴P115升级款
yamaha雅马哈大佰专卖店
江苏南通
279251
5699
49
雅马哈电钢琴YDP-143R电子钢琴数码钢琴88键重锤成人专业顺丰包邮
吉利乐器专营店
安徽合肥
115168
3599
32
雅马哈KBP2000电钢琴88键重锤数码钢琴KBP1000智能钢琴电子钢琴
亚伦乐器专营店
北京
129573
4799
27
雅马哈电钢琴YDP-103R专业88键重锤成人家用初学智能电子数码钢琴
广州知音乐器专营
广东广州
93574
3599
26
雅马哈电钢琴KBP-1000/2000初学者家用88键重锤专业成人电子钢琴
郑州豫华乐器专营店
河南郑州
990000
45000
22
日本原装进口二手三角钢琴专业演奏成人家用初学者雅马哈C3三角琴
qiqi926308
上海
95980
4799
20
雅马哈电钢琴YDP-103R数码钢琴88键重锤成人专业顺丰入户安装
yamaha畅想专卖店
陕西西安
59223
3117
19
雅马哈P-125B125WH智能成人儿童88键重锤数码电子钢琴P115升级款
国乐乐器专营店
江苏南通
96883
5699
17
雅马哈电钢琴YDP-143立式家用成人专业电子88键重锤YDP142电钢
世纪音缘乐器专营店
北京
105000
7000
15
雅马哈数码电钢琴YDP-163舞台演奏智能88键重锤专业成人电子钢琴
哝哝qq1024209412
上海
79786
5699
14
印尼进口雅马哈电钢琴YDP143b电子钢琴88键重锤数码钢琴YDP-143wh
扬威乐器专营店
浙江嘉兴
238000
17000
14
日本原装雅马哈二手钢琴初学者儿童成人家用立式YAMAHAU1H/U3H
斩月9100
上海
68388
5699
12
雅马哈电钢琴YDP-143BYDP143/88键重锤立式家用专业成人电子钢琴
广州知音乐器专营
广东广州
34287
3117
11
雅马哈电钢琴P-115BP-125WH成人初学智能专业数码钢琴88键重锤
音乐琴乐器专营店
湖北武汉
84150
7650
11
雅马哈电钢琴YDP-163成人专业家用数码88键重锤电子电钢162升级款
世纪音缘乐器专营店
北京
84150
7650
11
雅马哈电钢琴YDP-163电子钢琴数码钢琴88键重锤成人专业顺丰包邮
吉利乐器专营店
安徽合肥
277200
25200
11
日本原装进口雅马哈二手钢琴YAMAHA/UX/UX-1/UX3高端演奏立式钢琴
sa鲜橙多
上海
180600
25800
7
二手钢琴日本原装进口雅马哈YAMAHAUX初学考级练习立式钢琴
古月懿轩
上海
19800
3300
6
雅马哈电钢琴P115BP-125WH成人初学专业电子数码钢琴88键重锤
yohoz
河北石家庄
17085
3417
5
雅马哈电钢琴P125B/P-125WH数码电子钢琴88键重锤P105/P115升级
星辉震东乐器专营店
北京
28495
5699
5
雅马哈88键重锤电钢琴键成人家用立式数码钢琴原装进口YDP143B/R
海都乐器专营店
四川成都
125000
25000
5
日本原装进口雅马哈YAMAHAU1A/U2A/U3A成人初学家用立式二手钢琴
sunliteagle
上海
22796
5699
4
Yamaha/雅马哈电钢琴智能数码钢琴88键重锤142升级电钢琴YDP-143
音乐琴乐器专营店
湖北武汉
22796
5699
4
顺丰雅马哈YDP-143B/143R数码电钢琴88键重锤成人家用初学者入门
雅马哈侨辉专卖店
上海
75200
18800
4
钢琴成人家用雅马哈u3h二手立式钢琴专业级雅马哈钢琴儿童初学者
郭峰钢琴有限公司
上海
107200
26800
4
【直播选琴】日本二手原装进口雅马哈立式钢琴YAMAHAUX立式黑
漂泊的懒虫
上海
53400
17800
3
日本原装进口雅马哈立式初学者儿童YAMAHAU3H成人家用真二手钢琴
福建弘成乐器有限公司
福建厦门
65400
21800
3
日本原装进口雅马哈YAMAHAU1M/U2M/U3M成人初学家用立式二手钢琴
sunliteagle
上海
47200
23600
2
钢琴专业级立式钢琴雅马哈yusyuxyuayu1雅马哈钢琴儿童初学者
郭峰钢琴有限公司
上海
3800
3800
1
YAMAHA雅马哈电钢琴KBP500KBP1000KBP200088键重锤数码
贵妃小姐
上海
4799
4799
1
新款雅马哈电钢琴YDP-103R数码钢琴88键重锤成人专业演奏
海川乐器专营店
浙江金华
23500
23500
1
二手钢琴雅马哈YAMAHA钢琴UX/UX1/UX2/UX3/UX5初学者成人家用立式
斩月9100
上海
25800
25800
1
【直播钢琴】日本原装进口雅马哈二手钢琴U3M专业演奏立式钢琴
sa鲜橙多
上海
10435979
从上表中可以看书,雅马哈比罗兰的知名度高得多。雅马哈总共有100多页,但是罗兰电钢琴搜索出来只有30页,雅马哈在综合排序的前50页总共有35中电钢琴,但是罗兰在前30页有60种,但是这60种全部加起来的交易额还不到雅马哈35种电钢琴交易额的一半。
然后csv文件可以导入matlab,再用table2array函数进行转换,否则画不了图!
然后把价格一样的,店铺门面不同,销量算在一起,销售额。
用下面这个代码:
roland_reserve=zeros(60,3);
a=1;
for i=1:60
if find(roland_reserve(:,2)==roland(i,2))
roland_reserve(a,1)=roland(i,1)+roland_reserve(a,1);
roland_reserve(a,3)=roland(i,3)+roland_reserve(a,3);
else
roland_reserve(a,2)=roland(i,2);
roland_reserve(a,1)=roland(i,1);
roland_reserve(a,3)=roland(i,3);
a=a+1;
end
end
然后再用下面这个代码,用bar函数画直方图,plot函数画连线图:
bar(yamaha_reserve(1:20,2),yamaha_reserve(1:20,1),20,'b')
for i=1:3
text(yamaha_reserve(i,2),yamaha_reserve(i,1),...
{[ num2str(yamaha_reserve(i,2)),' ',num2str(yamaha_reserve(i,1))]});
end
hold on
bar(roland_reserve(1:20,2),roland_reserve(1:20,1),200,'r')
for i=1:3
text(roland_reserve(i,2),roland_reserve(i,1),...
{[ num2str(roland_reserve(i,2)),' ',num2str(roland_reserve(i,1))]});
end
%
% plot(yamaha_reserve(1:20,2),yamaha_reserve(1:20,1),'-ob')
% for i=1:3
% text(yamaha_reserve(i,2),yamaha_reserve(i,1),...
% {[ num2str(yamaha_reserve(i,2)),' ',num2str(yamaha_reserve(i,1))]});
% end
% hold on
% plot(roland_reserve(1:20,2),roland_reserve(1:20,1),'-*r')
% for i = 1:3
% text(roland_reserve(i,2),roland_reserve(i,1),...
% {[ num2str(roland_reserve(i,2)),' ',num2str(roland_reserve(i,1))]});
% end
得到了下面这些图表:(横坐标是价格,纵坐标是销售量和销售额)
销售量图表:
销售额图表:
蓝 {MOD}是雅马哈电钢,红 {MOD}是罗兰电钢,明显无论从销售额还是销售量上来讲,雅马哈都要多得多。
买一台中等价位(价格的中位数)的雅马哈电钢大概是 17400元
median(yamaha_reserve(1:20,:))
买一台中等价位的罗兰电钢大概是 7140元
(median(roland_reserve(1:20,:)))
这是由于淘宝网上廉价罗兰往往卖得好,贵的罗兰卖得不好,所以在综合排序的时候,前面会抓取到很多的廉价罗兰。但是雅马哈的名气大一些,所以综合排序前面也会抓取到一些比较贵的雅马哈,那么自然中位数就上去了。罗兰的中位数被很多的廉价给扯下去了,但罗兰的中位数更准确,因为爬虫抓取到了所有30页的罗兰电钢数据。
同时近一个月以来:
罗兰总销售额4028410罗兰电钢只有四百多万。
雅马哈总销售额10435979!!!雅马哈近一个月交易额竟然有一千多万,中国人这么喜欢吗?
但是
但是
但是
我还是喜欢罗兰电钢!
猴哥V5!!!!
猴哥猴哥V5!!!!
猴哥猴哥猴哥V5!!!!
rolling girl B站链接:
https://www.bilibili.com/video/av2391877?from=search&seid=17696750908259767803
(B站迟早会去光顾的,嘿嘿嘿)
代码解析:
import re
from selenium.common.exceptions import TimeoutException # 时间溢出异常
from urllib.parse import quote # 把输入的参数转化进行编码,转化为url可以接受的参数。
from pyquery import PyQuery as pq
from selenium.webdriver import * # 所有浏览器都引进来
from selenium.webdriver.common.by import By # 解析方式 from selenium.webdriver.common.by.By import *也行
from selenium.webdriver.support import expected_conditions as EC # 期望情况的判断
from selenium.webdriver.support.wait import WebDriverWait # 显式等待
import pymongo#引入数据库的库
from bs4 import BeautifulSoup#引入“美味的汤”
chrome_options = ChromeOptions()#chrome浏览器的选项初始化
chrome_options.add_argument('--headless')#进行无界面的设置,这里必须要分开才行,这里返回的不是chrome_options,只是通过函数进行相关设置。
browser = Chrome(chrome_options=chrome_options)#将设置付诸行动,建立浏览器
# browser=Chrome()
wait = WebDriverWait(browser, 2.5)#调用webdriver的类进行显式等待的设置。
KEYWORD = '雅马哈电钢琴'
MONGO_URL = 'localhost'#本地的地址,用来连接
MONGO_DB = 'taobao'#数据库的名字
MONGO_COLLECTION = 'yamaha'#集合的名字
client = pymongo.MongoClient(MONGO_URL)#建立连接
database = client[MONGO_DB]#建立数据库
database[MONGO_COLLECTION].drop()#清除原来的数据,drop掉原来的表
def index_page(page):
"""
抓取当前索引页
不返回任何值
"""
print('正在爬取第', page, '页')
try:
url = 'http://s.taobao.com/search?q='+quote(KEYWORD)
browser.get(url)
if page > 1:
input = wait.until(
EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager div.form > input'))
)
submit = wait.until(
EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager div.form > span.btn.J_Submit'))
)
input.clear()
input.send_keys(page)
submit.click()
wait.until(
EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#mainsrp-pager li.item.active > span'), str(page))
)#判断str(page)是否在
print('first_success')
wait.until(
EC.presence_of_element_located((By.CSS_SELECTOR, '.m-itemlist .items .item'))
)
get_products(browser)
print('second_success')
except TimeoutException:
index_page(page)#传入页面的页码进行解析
def get_products(browser):
html = browser.page_source
doc = pq(html) # 运用pyquery将网页解析
items = doc('#mainsrp-itemlist .items .item ').items()#运用pyquery的items方法将返回的集合进行单个分解,成为generator迭代器,从而可以通过for循环进行输出
for item in items:
# print(type(item))输入为generator
soup = BeautifulSoup(item.html(), 'lxml')#这里为了解析出价格,采用了bs方法,pyquery解析库解析不出来
product = {
'image': item.find('.pic .img').attr('data-src'),#图片链接
'price': float(soup.find(name='strong').string),#价格链接
'deal': int(re.sub('[^1234567890]','',item.find('.deal-cnt').text())),#成交数量
'title':re.sub('s','',item.find('.title').text()),#商品名字
'shop':re.sub('s','',item.find('.shop').text()),#店铺名字
'location': re.sub('s','',item.find('.location').text())#地点
}
#以上内容有些用正则表达式进行去掉空格操作,交易数采用了去掉数字操作。
# print(product)
condition = database[MONGO_COLLECTION].find_one({'title': product['title']})#查询是否有一样的数据
if not condition :#如果没有一样的数据
if not re.match('电子琴',product['title']):#并且商品名字中没有包含电子琴
if product['price']>=3000:#并且商品的价格必须大于等于3000
save_to_mongo(product)#存储到数据库中
print(product['price'])#将商品价格打印出来
else:
print("the same!")#其余情况,打出the same进行标识。
# mongo_db数据库保存
def save_to_mongo(result):
"""
保存到mongodb
:param result:
:return:
"""
try:
if database[MONGO_COLLECTION].insert(result):
print('mongo_db succeed!')
except Exception: # except Exception是所有异常通用的写法,没有具体指定
print('mongo_db fail!')
global i#将页码设置为全局变量,先声明,再赋值,这是规矩。
i=0#将i初始化
def main():
global i
if database[MONGO_COLLECTION].find().count()<100:#查询数据库中的数据如果小于100,那么就继续进行抓取,否则取消
i+=1
index_page(i)
else:
print('done!')#如果达到100数据则打印出done
return 0
while(1):
main()
# while(database[MONGO_COLLECTION].find().count()<100):
# main()
#这样写更好
爬虫/excel/matlab总结笔记:
1、
css选择器 .item 对于有多个class属性的标签:比如class=”item abc”,只要其中一个是item就能选择到
2、
“.item.abc”,表示选取class既含有item,也含有abc的标签,如上所示。
“#mainsrp-itemlist .items .item”(有空格表示有子孙关系,只要含有就行,不一定是父子关系)
3、
div.form class属性为form的div节点
4、
div.form > span.btn.J_Submit (>表示之后的子节点)
5、
doc=pq(html)
lis=doc(“li”).items() 满足之前表达式的所有节点
li是tag_name
6、
lis=doc(“li”).items()的类型
迭代器,这个不能用text()方法,只有Pyquery类型能用
7、
find()方法查找所有的子孙节点,对于Pyquery类来说
8、
text()方法不需要遍历就可以获取,html()需要全部遍历才行。
doc('#mainsrp-itemlist ')
比如li.text(),li是li元素的一个列表,但是他的类型还是,这样引用text()方法是可以的,但是html()必须要进行如下的循环遍历
for li_item in li
print(li_item.html())
9、product={
'image':item.find('.pic .img').attr(),
'price':item.find('.price').text(),
'deal':item.find('.deal-cnt').text(),
'title':item.find('.title').text(),
'shop':item.find('.shop').text(),
'location':item.find('.location').text()
}
text()方法对于换行符之类的不会忽略。第一个和最后一个换行符会替换。
10、
正则表达式测试http://tool.oschina.net/regex/
正则表达式去除/n/t
11、
用selenium模拟浏览器行为的时候
网上的答案:一般遇到click失败时我的一般处理方法是改用send_keys(Keys.ENTER)
,直接用发回车键,简单粗暴。
12.
CSS选择器只要加了标签名就发现不行了。真的不知道是为什么,晕了好久。
div.mainsrc-xyz不行,但是只有.mainsrc-xyz就行
items = doc('#mainsrp-itemlist .items .item ').items()
但是items = doc(‘div#mainsrp-itemlist .items .item ').items()就不行了,从html分析上来说是绝对可行的。以后遇到没有class和id属性的标签最好不要用Pyquery,去喝美味的汤。beautiful soup
strong仅仅抓价格,beautifulsoup行得通,xpath行得通,但是pyquery的css选择器方式find(‘strong’)就是不行。
过了过了,不说了。
13、
要熟悉正则表达式啊。
查书P140 崔庆才
w 匹配字母、数字、下划线
W 匹配不是字母、数字、下划线
s匹配任意空白字符
S 匹配不是。。。
d匹配任意数字
D匹配不是。。。
[^...]匹配不是...的内容
正则表达式可以匹配中文内容!!!’中文’OK
14、替换字符串
import re
re.sub('s', '' ,item.find('.location').text())(将换行符什么的空白替换为NONE)
15、匹配字符串
re.match(‘正则表达式’,content)
excel16、=C2*D2直接在excel表的空格里面写函数表达式就行了!
matlab17、直方图函数bar(x,y,100(条形的宽度),’r’(颜 {MOD}是红 {MOD}))
matlab18、
median(A,1)列的中位数
median(A,2)行的中位数
matlab中位数函数
明天我试着开始爬一爬彩票的数据了。嘿嘿嘿!
中间碰到pyquery无法继续在div标签下解析strong标签的bug,卡了很久,然后下载chromedriver来启动chrome浏览器由于版本问题纠结很久,最后才发现···自己没写main()主函数,浪费了3个小时···python的库很多,每次调用都感觉很神奇,内部是怎么实现的只能稍微猜一猜,至于是什么还是不要去深究了。