编写爬虫
1.功能描述
(淘宝网的爬取必须要模拟用户登录)
- 目标:获取当当搜索页面的信息,提取其中的商品名称和价格。
- 理解:当当网的搜索接口,翻页的处理。
- 技术路线:requests-re
在当当网站搜索关键词“东野圭吾”
-
观察网址变化
-
起始页 http://search.dangdang.com/?key=东野圭吾&act=input
-
第二页 http://search.dangdang.com/?key=东野圭吾&act=input&page_index=2
-
第三页 http://search.dangdang.com/?key=东野圭吾&act=input&page_index=3
2.程序的结构设计
操作步骤
(爬取网站时,首先要查看网站的robots协议,在allow的情况下,才可以爬取。本例中,爬取网页仅作学习之用,且为类人行为。)
- 提交商品的搜索请求,循环获取页面。
- 对于每个页面,提取商品名称和价格信息。
- 将信息输出到屏幕上。
- 商品名称和价格的查找
源代码
- 重点是正则表达式的应用
import requests
import re
def getHTMLText(url):
try:
r = requests.get(url, timeout= 30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""
#获取商品的名称和价格,使用正则表达式(lt = list)
def parsePage(ilt, html):
try:
plt = re.findall(r'span.*?search_now_price.*?>(.*?)<', html)#正则表达式
tlt = re.findall(r'li.*?p.*?name.*?<a.*?title="(.*?)"', html)
for i in range(len(plt)):
# eval函数可以将获得的键值对中最外层的双引号或单引号去掉
#split函数使用‘:’分割字符串,获得键值对的后半部分
price = plt[i].split(';')[1]
title = tlt[i].split(' ')[1]#以空格分割,字符串首字符为空格,所以文字部分在[1]处
ilt.append([price, title])
except:
print("")
def printGoods(ilt):
tplt = "{:4}\t{:8}\t{:16}"#tplt=typelist 用槽函数设置打印格式,三列,间隔分别为4,8,16
print(tplt.format("序号", "价格", "商品名称"))
count = 0
for g in ilt:
count = count + 1
print(tplt.format(count, g[0], g[1]))
def main():
goods = '东野圭吾'
depth = 2
start_url = "http://search.dangdang.com/?key=" + goods
infoList = []
for i in range(depth):
try:
url = start_url + '&page_index=' + str(i+1) #3页
html = getHTMLText(url)
parsePage(infoList, html)
except:
continue #解析页面出问题时,继续下个页面,不影响整个程序的运行
printGoods(infoList)
print(main())
输出结果:
序号 价格 商品名称
1 79.50 东野圭吾四大推理套装(共4册)
2 27.30 东野圭吾:恶意(2016版,东野圭吾四大杰作之一)
3 31.00 东野圭吾新作:魔力的胎动(限量东野圭吾印签版本)
4 41.10 东野圭吾:白夜行(易烊千玺、孟非推荐,东野圭吾作品无冕之王)
5 24.70 东野圭吾:悲剧人偶
6 22.50 东野圭吾:假面山庄(东野圭吾烧脑长篇)
7 17.50 东野圭吾:空中杀人现场
8 49.50 东野圭吾:预知梦(《嫌疑人X的献身》系列作,日文版销量超100万册)
9 24.00 东野圭吾:天使之耳
10 24.70 东野圭吾:侦探伽利略
11 24.70 东野圭吾:只差一个谎言
12 24.70 东野圭吾:禁断的魔术(《嫌疑人X的献身》系列全新长篇小说,李现推荐)
13 29.50 东野圭吾:盛夏方程式(《嫌疑人X的献身》系列长篇小说)
14 24.70 东野圭吾:毕业(《恶意》系列开篇之作)
15 24.20 东野圭吾:嫌疑人X的献身(王凯、张鲁一推荐,至为纯粹的爱情,绝好的诡计)
16 35.50 放学后(东野圭吾成名作)
17 39.00 东野圭吾新作:白金数据(凶手,竟然是我自己?!)
18 17.50 东野圭吾:变身
19 22.50 秘密
20 31.20 东野圭吾:时生(东野圭吾暖心力作)
21 27.50 东野圭吾:我杀了他(精装版)
22 19.70 新参者(2016版)
23 24.70 东野圭吾:沉睡的森林
24 22.50 圣女的救济(东野圭吾经典长篇小说)
25 19.70 红手指(2016版)
26 22.50 东野圭吾:名侦探的咒缚
27 29.80 幻夜
28 27.30 东野圭吾:解忧杂货店(胡歌、王俊凯、刘昊然倾情推荐,东野圭吾长篇小说代表作,这家店帮你找回内心流失的东西)
29 19.70 祈祷落幕时
30 65.40 东野圭吾作品:假面之夜+假面饭店+假面前夜(套装共3册)独家附赠精美手账
31 24.70 谁杀了她(2018精装版)
32 22.50 流星之绊
33 24.70 黎明之街(东野圭吾极具突破性的经典长篇小说)
34 29.00 东野圭吾:魔球
35 22.50 东野圭吾全新力作:危险的维纳斯(反转再反转,但反转的是故事,还是人心?《恶意》之后,再次揭露人性的弱点。)
36 141.50 东野圭吾神探伽利略小说集(套装共6册)
37 19.70 分身(2016版)(天王作家东野圭吾写尽人性的黑暗与美丽)
38 24.70 东野圭吾:超杀人事件
39 19.70 麒麟之翼(东野圭吾“加贺探案集”经典
40 19.50 东野圭吾作品:白马山庄谜案(2018年新版)
41 37.00 拉普拉斯的魔女
42 96.70 东野圭吾笑的世界(全4册)
43 24.50 东野圭吾:布谷鸟的蛋
44 54.40 东野圭吾作品:天使之耳+第十年的情人节(套装共2册)(精装)
45 19.20 东野圭吾作品湖畔
46 19.70 彷徨之刃
47 17.50 大雪中的山庄:东野圭吾用悬念照彻人性
48 22.50 东野圭吾:怪笑小说(2018版)
49 17.50 东野圭吾:我的晃荡的青春(东野圭吾自传)
50 19.70 名侦探的守则
51 22.50 伽利略的苦恼:《嫌疑人X的献身》之后的故事
52 17.50 东野圭吾作品:怪人们(2018年新版)
53 19.50 东野圭吾作品:没有凶手的暗夜(2018年新版)
54 39.10 东野圭吾:学生街的日子
55 37.80 东野圭吾作品:假面饭店(新修珍藏版)+假面前夜
56 29.00 东野圭吾:平行世界爱情故事
57 16.00 宿命
58 96.80 东野圭吾四大经典小说(套装共4册)
59 19.70 造彩虹的人:东野圭吾长篇小说,中文简体首次出版
60 22.50 东野圭吾:再见了,忍老师
61 24.70 东野圭吾:毒笑小说(2018版)
62 12.00 草枕:东野圭吾译者刘子倩倾情翻译
63 17.50 东野圭吾作品:梦回都灵(2018年新版)
64 18.90 假面饭店(东野圭吾出道25周年纪念珍藏版)
65 20.60 沉睡的人鱼之家
66 14.00 东野圭吾:平行世界・爱情故事(东野圭吾悬疑经典:将爱情与超现实完美结合!)
67 17.50 布鲁特斯的心脏
68 16.00 侦探俱乐部(东野圭吾经典本格推理小说合集)
69 15.70 疾风回旋曲(东野圭吾力作!热销100万册,拿起就无法放下的阅读体验。继《白夜行》《嫌疑人X的献身》后再度挑战逻辑极限。
70 17.50 浪花少年侦探团
71 19.70 东野圭吾:杀人之门
72 17.50 魔球
73 19.75 东野圭吾:我的老师是侦探
74 19.70 悖论13
75 18.10 恋爱的贡多拉(东野圭吾新作,与众不同的恋爱推理:你以为的天作之合,也许只是同床异梦)
76 88.70 学生必读东野圭吾推理套装(全4册)
77 16.00 美丽的凶器
78 24.70 从前我死去的家
79 18.20 同级生
80 27.60 假面之夜(东野圭吾新作,假面系列第3弹!)
81 18.90 风雪追击
82 72.90 东野圭吾经典三册套装:《白金数据》《拉普拉斯的魔女》《沉睡的人鱼之家》
83 17.50 东野圭吾:鸟人计划
84 18.90 假面前夜(东野圭吾新作,假面系列第2弹!)
85 23.70 虚无的十字架(2018版)
86 52.70 现代推理馆东野圭吾系列套装(全三册)
87 21.00 单恋(2016版)
88 19.70 天空之蜂
89 14.70 酷酷的代课老师
90 28.10 东野圭吾作品:绑架游戏(东野圭吾颇具代表性的绑架推理,其创新之处并不在于“绑架”,而在“游戏”)
91 29.50 天使之耳:交通警察之夜(精装版)
92 24.30 没有凶手的杀人夜(2018新版)
93 18.50 使命与魂的尽头
94 24.70 东野圭吾:黑笑小说(2018版)
95 23.30 白马山庄杀人事件(2018新版)
96 25.20 科学?
97 112.80 东野圭吾“全能”套装(全四册)
98 24.60 东野圭吾:推理之王
99 74.00 东野圭吾基石四部曲(套装共4册)(揭秘东野圭吾成为推理天王的四个阶段:冒险―坚定―怀疑―浪漫)
100 16.00 东野圭吾:毒笑小说
101 24.70 东野圭吾:歪笑小说(2018版)
102 26.70 东野圭吾
103 22.70 东野圭吾:黎明之街
104 27.50 挑战(东野圭吾作品・精装)
105 29.80 那时的某人(东野圭吾中短篇小说集)
106 25.00 第十年的情人节(精装)
107 20.80 使命与魂的尽头(东野圭吾:手术刀下是不共戴天的仇人,你是让他死,还是让他活?)
108 21.40 梦回都灵(2018新版)
109 116.40 东野圭吾经典套装(全四册)
110 21.40 怪人们(2018新版)
111 98.90 东野圭吾作品(套装共5册)
112 16.20 东野圭吾:空中杀人现场(万米高空中的惊险之旅)
113 19.10 东野圭吾:怪笑小说
114 59.70 东野圭吾
115 26.30 圣诞妈妈
116 86.70 日本当代小说四大杰作(新经典严选,套装共4册)
117 16.00 黑笑小说
118 94.41 东野圭吾作品
119 88.00 东野圭吾加贺探案精选集:红手指+新参者+麒麟之翼+祈祷落幕时(共4册)推理悬疑恐怖惊悚小说畅销书籍排行榜解忧杂货店白夜
3.存在的问题
- 视频中爬取淘宝商品的实例,现在已不可用,需要模拟登录才可以。
- 京东商品的翻页涉及动态数据,以后再研究。
- 此次爬取当当网可以很好运行,且翻页设计简单。
- 对原有正则表达式进行了修改,参考了《Python3 网络爬虫开发实战》一书中关于正则表达式的讲解,可能还有更简洁的写法,后续研究清楚再补充。