Amazon关键词抓取

亚马逊的网址构造很简单,几乎算是静态的网页,花费3小时完美收工,不要在意细节!

在python3下利用xpath就可以完美解决

xpath的使用方法请见:

python之lxml(xpath)

入口图界面为:

抓取操作为:

抓取的效果图如下:

图片:

excel:

  1 ‘‘‘
  2                               .======.
  3                               | INRI |
  4                               |      |
  5                               |      |
  6                      .========‘      ‘========.
  7                      |   _      xxxx      _   |
  8                      |  /_;-.__ / _\  _.-;_\  |
  9                      |     `-._`‘`_/‘`.-‘     |
 10                      ‘========.`\   /`========‘
 11                               | |  / |
 12                               |/-.(  |
 13                               |\_._\ |
 14                               | \ \`;|
 15                               |  > |/|
 16                               | / // |
 17                               | |//  |
 18                               | \(\  |
 19                               |  ``  |
 20                               |      |
 21                               |      |
 22                               |      |
 23                               |      |
 24                               .======.
 25     ……………………………………………………………………………………
 26
 27                           !!!!!
 28                            \\ - - //
 29                            (-● ●-)
 30                            \ (_) /
 31                             \ u /
 32                     ┏oOOo-━━━━━━━━┓
 33                     ┃           ┃
 34                     ┃   耶稣保佑!   ┃
 35                     ┃            永无BUG!!!┃
 36                     ┃           ┃
 37                     ┗━━━━━━━━-oOOo┛
 38
 39     ……………………………………………………………………………………
 40
 41                                   _oo0oo_
 42                                  088888880
 43                                  88" . "88
 44                                  (| -_- |)
 45                                   0\ = /0
 46                                ___/‘---‘\___
 47                              .‘ \\\\|     |// ‘.
 48                             / \\\\|||  :  |||// \ 49                            /_ ||||| -:- |||||- \ 50                           |   | \\\\\\  -  /// |   |
 51                           | \_|  ‘‘\---/‘‘  |_/ |
 52                           \  .-\__  ‘-‘  __/-.  /
 53                         ___‘. .‘  /--.--\  ‘. .‘___
 54                      ."" ‘<  ‘.___\_<|>_/___.‘ >‘  "".
 55                     | | : ‘-  \‘.;‘\ _ /‘;.‘/ - ‘ : | |
 56                     \  \ ‘_.   \_ __\ /__ _/   .-‘ /  /
 57                 =====‘-.____‘.___ \_____/___.-‘____.-‘=====
 58                                   ‘=---=‘
 59
 60
 61               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 62                         佛祖保佑           永无BUG
 63
 64
 65
 66
 67                               ┌─┐       ┌─┐
 68                            ┌──┘ ┴───────┘ ┴──┐
 69                            │                 │
 70                            │       ───       │
 71                            │  ─┬┘       └┬─  │
 72                            │                 │
 73                            │       ─┴─       │
 74                            │                 │
 75                            └───┐         ┌───┘
 76                                │         │
 77                                │         │
 78                                 │         │
 79                                │         └──────────────┐
 80                                │                        │
 81                                │                        ├─┐
 82                                │                        ┌─┘
 83                                │                        │
 84                                └─┐  ┐  ┌───────┬──┐  ┌──┘
 85                                  │ ─┤ ─┤       │ ─┤ ─┤
 86                                  └──┴──┘       └──┴──┘
 87                                      神兽保佑
 88                                      代码无BUG!
 89 ‘‘‘
 90 # !/usr/bin/python3.4
 91 # -*- coding: utf-8 -*-
 92
 93 # 前排烧香
 94 # 永无BUG
 95
 96 import requests
 97 import time
 98 import random
 99 import xlsxwriter
100 from lxml import etree
101 import urllib.parse
102 import urllib.request
103
104 def geturl(url):
105     # 制作头部
106     header = {
107         ‘User-Agent‘: ‘Mozilla/5.0 (iPad; U; CPU OS 4_3_4 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8K2 Safari/6533.18.5‘,
108         ‘Referer‘: ‘https://www.amazon.cn/‘,
109         ‘Host‘: ‘www.amazon.cn‘,
110         ‘Accept‘: ‘text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8‘,
111         ‘Accept-Encoding‘: ‘gzip, deflate, br‘,
112         ‘Accept-Language‘: ‘zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3‘,
113         ‘Connection‘: ‘keep-alive‘
114     }
115     # get参数
116     res = requests.get(url=url, headers=header)
117     # (‘UTF-8‘)(‘unicode_escape‘)(‘gbk‘,‘ignore‘)
118     resdata = res.content
119     return resdata
120
121 def getimg(url):
122     # 制作头部
123     header = {
124         ‘User-Agent‘: ‘Mozilla/5.0 (iPad; U; CPU OS 4_3_4 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8K2 Safari/6533.18.5‘,
125         ‘Referer‘: ‘https://www.amazon.cn/‘,
126         ‘Host‘: ‘www.amazon.cn‘,
127         ‘Accept‘: ‘text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8‘,
128         ‘Accept-Encoding‘: ‘gzip, deflate, br‘,
129         ‘Accept-Language‘: ‘zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3‘,
130         ‘Connection‘: ‘keep-alive‘
131     }
132     # get参数
133     res = requests.get(url=url, headers=header,stream=True)
134     # (‘UTF-8‘)(‘unicode_escape‘)(‘gbk‘,‘ignore‘)
135     resdata = res.iter_content(chunk_size=1024)
136     for chunk in resdata:
137         if chunk:
138             return chunk
139
140 def begin():
141     taoyanbai = ‘‘‘
142             -----------------------------------------
143             | 欢迎使用亚马逊爬取系统                   |
144             | 时间:2016年9月20日                   |
145             | 出品:TTyb                           |
146             | 微信/QQ:420439007                    |
147             -----------------------------------------
148         ‘‘‘
149     print(taoyanbai)
150
151
152 def timetochina(longtime, formats=‘{}天{}小时{}分钟{}秒‘):
153     day = 0
154     hour = 0
155     minutue = 0
156     second = 0
157     try:
158         if longtime > 60:
159             second = longtime % 60
160             minutue = longtime // 60
161         else:
162             second = longtime
163         if minutue > 60:
164             hour = minutue // 60
165             minutue = minutue % 60
166         if hour > 24:
167             day = hour // 24
168             hour = hour % 24
169         return formats.format(day, hour, minutue, second)
170     except:
171         raise Exception(‘时间非法‘)
172
173
174 if __name__ == ‘__main__‘:
175
176     begin()
177
178     keyword = input("请输入关键词:")
179     try:
180         sort = int(input("相关度排序请按0,人气排序请按1,上架时间排序请按2,价格低到高排序请按3,价格高到低请按4,用户评分排序请按5(默认相关度排序):"))
181         if sort > 5 or sort <= 0:
182             sort = ""
183         elif sort == 1:
184             sort = "popularity-rank"
185         elif sort == 2:
186             sort = "date-desc-rank"
187         elif sort == 3:
188             sort = "price-asc-rank"
189         elif sort == 4:
190             sort = "price-desc-rank"
191         elif sort == 5:
192             sort = "review-rank"
193     except:
194         sort = ""
195     try:
196         pages = int(input("请输入抓取页数(默认5页):"))
197     except:
198         pages = 5
199
200     a = time.clock()
201
202     # 转成字符串
203     # %y 两位数的年份表示(00 - 99)
204     # %Y 四位数的年份表示(000 - 9999)
205     # %m 月份(01 - 12)
206     # %d 月内中的一天(0 - 31)
207     # %H 24小时制小时数(0 - 23)
208     # %I 12小时制小时数(01 - 12)
209     # %M 分钟数(00 = 59)
210     # %S 秒(00 - 59)
211     today = time.strftime(‘%Y%m%d%H%M‘, time.localtime())
212     # 创建一个Excel文件
213     workbook = xlsxwriter.Workbook(‘../excel/‘ + today + ‘.xlsx‘)
214     # 创建一个工作表
215     worksheet = workbook.add_worksheet()
216
217     # 第一行参数
218     first = [‘商品名称‘, ‘品牌‘, ‘详情页网址‘, ‘原价格‘, ‘星级‘, ‘图片‘,‘图片网址‘]
219
220     # 写入excel计数行
221     count = 1
222
223     # 下载图片计数
224     num = 0
225
226     # 构造时间戳
227     nowtime = int(time.time())
228
229     for page in range(0,pages):
230
231         urldata = {
232             ‘page‘:page,
233             ‘sort‘:sort,
234             ‘keywords‘:keyword,
235             ‘ie‘:‘UTF-8‘,
236             ‘qid‘:str(nowtime)
237         }
238         urldata = urllib.parse.urlencode(urldata)
239         url = "https://www.amazon.cn/s/ref=nb_sb_noss_1?__mk_zh_CN=亚马逊网站&" + urldata
240
241         html = geturl(url).decode(‘Utf-8‘, ‘ignore‘)
242         #file = open("../data/html.txt","wb")
243         #file.write(html)
244         #file.close()
245
246         #file = open("../data/html.txt","rb")
247         #html = file.read().decode(‘Utf-8‘, ‘ignore‘)
248         #print(html)
249
250         # xpath解析需要的东西
251         contents = etree.HTML(html)
252
253         # 找到商品名称
254         titles = contents.xpath(‘//a[@class="a-link-normal s-access-detail-page  a-text-normal"]/@title‘)
255         arr_title = []
256         for title in titles:
257             arr_title.append(title)
258
259         # 找到品牌
260         brands = contents.xpath(‘//div[@class="a-row a-spacing-mini"][1]/div/span/text()‘)
261         arr_brand = []
262         for brand in brands:
263             if "更多购买选择" in brand:
264                 pass
265             else:
266                 arr_brand.append(brand)
267
268         # 找到详情页网址
269         detailurls = contents.xpath(‘//a[@class="a-link-normal s-access-detail-page  a-text-normal"]/@href‘)
270         arr_detailurl = []
271         for detailurl in detailurls:
272             arr_detailurl.append(urllib.parse.unquote(detailurl))
273             #print(detailurl)
274         #print(len(arr_detailurl))
275
276         # 得到原价格
277         # 这里是忽略了新品价格、非新品价格
278         prices = contents.xpath(‘//div[@class="a-row a-spacing-none"][1]/a/span[1]/text()‘)
279         arr_price = []
280         for price in prices:
281             arr_price.append(price)
282
283         # 得到星级
284         grades = contents.xpath(‘//span[@class="a-icon-alt"]/text()‘)
285         arr_grade = []
286         for grade in grades:
287             if "平均" in grade:
288                 arr_grade.append(grade)
289                 #print(grade)
290             else:
291                 pass
292         if arr_grade:
293             arr_grade.pop()
294         #print(len(arr_grades))
295
296         # 得到图片
297         imgurls = contents.xpath(‘//a[@class="a-link-normal a-text-normal"]/img/@src‘)
298         arr_img = []
299
300         for imgurl in imgurls:
301             file = open("../jpg/" + str(num) + ".jpg","wb")
302             pic = urllib.request.urlopen(imgurl)
303             file.write(pic.read())
304             file.close()
305             # 每一次下载都暂停1-3秒
306             imgtime = random.randint(1, 3)
307             print("下载图片暂停" + str(imgtime) + "秒")
308             time.sleep(imgtime)
309             arr_img.append(imgurl)
310             num = num + 1
311             #print(imgurl)
312         #print(len(arr_img))
313
314         # 写入excel
315         # 写入第一行
316         for i in range(0, len(first)):
317             worksheet.write(0, i, first[i])
318
319         # 写入其他数据
320         for j in range(0,len(arr_title)):
321             worksheet.write(count,0,arr_title[j])
322             worksheet.write(count, 1, arr_brand[j])
323             worksheet.write(count, 2, arr_detailurl[j])
324             try:
325                 worksheet.write(count, 3, arr_price[j])
326             except Exception as err:
327                 print(err)
328                 worksheet.write(count, 3, "")
329             worksheet.write(count, 4, arr_grade[j])
330             worksheet.insert_image(count, 5, "../jpg/" + str(count - 1) + ".jpg")
331             worksheet.write(count, 6, arr_img[j])
332             count = count + 1
333
334         # 每一次下载都暂停5-10秒
335         loadtime = random.randint(5, 10)
336         print("抓取网页暂停" + str(loadtime) + "秒")
337         time.sleep(loadtime)
338
339     workbook.close()
340     b = time.clock()
341     print(‘运行时间:‘ + timetochina(b - a))
342     input(‘请关闭窗口‘)
时间: 2024-09-26 23:07:42

Amazon关键词抓取的相关文章

网络爬虫: 从allitebooks.com抓取书籍信息并从amazon.com抓取价格(2): 抓取allitebooks.com书籍信息及ISBN码

这一篇首先从allitebooks.com里抓取书籍列表的书籍信息和每本书对应的ISBN码. 一.分析需求和网站结构 allitebooks.com这个网站的结构很简单,分页+书籍列表+书籍详情页. 要想得到书籍的详细信息和ISBN码,我们需要遍历所有的页码,进入到书籍列表,然后从书籍列表进入到每本书的详情页里,这样就能够抓取详情信息和ISBN码了. 二.从分页里遍历每一页书籍列表 通过查看分页功能的HTML代码,通过class="current"可以定位当前页码所在span标签,此s

网络爬虫: 从allitebooks.com抓取书籍信息并从amazon.com抓取价格(3): 抓取amazon.com价格

通过上一篇随笔的处理,我们已经拿到了书的书名和ISBN码.(网络爬虫: 从allitebooks.com抓取书籍信息并从amazon.com抓取价格(2): 抓取allitebooks.com书籍信息及ISBN码) 接下来将通过ISBN码去amazon.com获取每本书对应的价格. 一.了解需要和分析网站 通过分析amazon.com得知,以ISBN码作为搜索关键字可查找到对应的书. 结果页码就有这本书的价格,既然价格是以$符号开头,那就可以通过正则表达式得到价格. 通过正则表达式匹配价格代码:

根据关键词抓取tmall数据

import urllib.requesturl = "https://list.tmall.com/search_product.htm?q=%C3%A2%B9%FB%B8%C9&type=p&spm=a220m.1000858.a2227oh.d100&xl=%C3%A2%B9%FB_1&from=.list.pc_1_suggest"headers = {"User-Agent":"Mozilla/5.0 (Macin

http协议请求实战——get请求示例之抓取百度搜索关键词对应网页信息

1通过分析搜索关键词对应的网址发现字段名和内容均在网址中网址可简化为www.baidu.com/s?wd=搜索的关键词 根据分析出的规律可通过构造get请求用爬虫实现在百度上自动查询某个关键词 代码如下: import urllib.request 导入urllib.requestkeywd = '高同同' 指定关键词keywd_cod = urllib.request.quote(keywd)将关键词进行编码url = 'https://www.baidu.com/s?wd='输入网址url_

如何抓取Amazon大图

https://www.douban.com/note/277033391/ 進入到日本Amazon看到某些商品有預覽圖可以放大欣賞,當你想要右鍵下載卻發現只得到空白圖或白邊圖.縮圖.切割圖,究竟原圖在哪裡?其實Amazon大圖並不是把切割後的圖拼貼起來,而是拿原圖下去做分析,接著來看看Amazon圖片的規則性. 圖片URL的組成先拿一個商品來分析看看 KERA! (ケラ) 2012年 05月号 [雑誌]進入商品預覽圖視窗,查看原始碼,找出圖片網址 http://z2-ec2.images-am

使用python抓取百度搜索、百度新闻搜索的关键词个数

由于实验的要求,需要统计一系列的字符串通过百度搜索得到的关键词个数,于是使用python写了一个相关的脚本. 在写这个脚本的过程中遇到了很多的问题,下面会一一道来. ps:我并没有系统地学习过python,只是很久之前用过它,感觉用起来还比较方便,于是这回又把它拾起来使用了.当然这也是考虑到手上有python机器学习的实战书籍,所以估计一段时间后还会再用的缘故. 思路:首先使用python的库函数把网页的内容爬下来,然后使用正则表达式去匹配想要的字符串,最后进行字符串处理就能得到想要的东西了.

Python练习:优酷评论过滤(抓取当前视频全部评论,并过滤不包括所需关键词的留言)

1 # coding:utf-8 2 print('正在初始化...') 3 import requests 4 import re 5 from lxml.html import fromstring 6 import pyautogui 7 import sys 8 import os 9 from multiprocessing.dummy import Pool 10 from lxml import _elementpath 11 12 13 class Youku_comment:

利用Python抓取亚马逊评论列表数据

前段时间,我家妹子公司老板叫她去将法国亚马逊评论列表的前100页共1000个评论用户的联系方式找出来.1000个用户,要一个个的去看再记录下来,而且并不是每个评论用户都会将个人的联系方式留下来.那么问题来了,这样费时费力的工作如果人工去做的话,那么就是花了两天的时间也就找了前30页的数据(还有别的工作要做),然后累的够呛的.本着心疼的原则(程序猿能找到妹子就很不错了,所以得心疼着),就想帮着她做点事. 我本身的工作是做游戏客户端开发的,主要使用的开发语言是lua和c++,并没有接触过网页.网站相

被惩罚的网站抓取不会减少BGP

被惩罚的网站抓取不会减少BGP, 网站被惩罚是一个非常令人苦恼的事情,得易搜信息网因为网站被惩罚往往伴随着索引量减少,关键词排名下降,流量减少等,自己的成果付之东流,没人愿意看到.很多人认为被搜索引擎惩罚就相当于被贴上了"垃圾"的标签,被牢牢的抓住了,再也翻不了身,搜索引擎也不会再很好的抓取这个网站,事实如此吗? 被惩罚的网站,抓取不会减慢 是否谷歌抓取被惩罚的站点频率会更少或更慢?谷歌回应,通常对被惩罚的网站,抓取不会减慢.因为网站被某个算法惩罚后,需要等待谷歌抓取这个网站,提取网站