目标

亚马逊公司(Amazon),是美国最大的一家网络电子商务公司,位于华盛顿州的西雅图,是网络上最早开始经营电子商务的公司之一,现在已成为全球商品品种最多的网上零售商和全球第二大互联网企业。
本次目标是爬取亚马逊所有家具种类销售排行榜前100名的商品排名信息。

首先把所有家具种类,以及种类页面链接爬取出来

代码

import requests
from lxml import etree
import pandas as pd
import time
import re
from pandas import DataFramedef gethtml(url0,head):i = 0while i < 5:try:html = requests.get(url = url0, headers = head,timeout = (10, 20))repeat = 0while (html.status_code != 200):  # 错误响应码重试print('error: ', html.status_code)time.sleep(20 + repeat * 5)if (repeat < 5):repeat += 1html = requests.get(url = url0, headers = head,timeout = (10, 20))return htmlexcept requests.exceptions.RequestException:print('超时重试次数: ', i + 1)time.sleep(1)i += 1raise Exception()def get_link(url, hea):req = gethtml(url, hea)html = etree.HTML(req.text)type_link0 = html.xpath('//span[@class="zg_selected"]/../following-sibling::ul//a/@href')  # 排除上级type_text = html.xpath('//*[@id="zg_browseRoot"]//span/text()')end_link0 = html.xpath('//span[@class="zg_selected"]/../following-sibling::li[1]')  # 兄弟节点(之后)end_link1 = html.xpath('//span[@class="zg_selected"]/../preceding-sibling::li[1]')  # 兄弟节点(之前)if (len(end_link0) or len(end_link1)):end_link = 1else:end_link = 0if (len(type_link0) == 1):print('***********',type_text)time.sleep(5)return type_link0,type_text, end_linkurl = 'https://www.amazon.com/-/zh/%E9%94%80%E5%94%AE%E6%8E%92%E8%A1%8C%E6%A6%9C-Home-Kitchen-%E5%AE%B6%E5%85%B7/zgbs/home-garden/1063306/ref=zg_bs_unv_hg_2_17873917011_3'print(url)
hea = {'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','accept-encoding': 'gzip, deflate, br','accept-language': 'zh-CN,zh;q=0.9','cache-control': 'max-age=0','downlink': '8','ect': '4g','rtt': '250','Cookie': "session-id=257-3500989-3695223; i18n-prefs=GBP; ubid-acbuk=257-5950834-2508848; x-wl-uid=1bEcLG2b03/1tAwPJNyfuRH+U7J9ZaPYejSBR4HXKuYQPJtLhQbDYyO/GOMypGKXqZrG7qBkS0ng=; session-token=x04EF8doE84tE+6CXYubsjmyob/3M6fdmsQuqzD0jwl/qGdO5aRc2eyhGiwoD0TFzK1rR/yziHsDS4v6cdqT2DySFXFZ9I5OHEtgufqBMEyrA0/Scr87KKA+GWOjfVmKRuPCqOGaixZQ6AIjU3e2iFOdM+3v90NeXFI3cazZcd6x9TYCy9b5u9V8zR7ePbdP; session-id-time=2082758401l; csm-hit=tb:MAA188S1G57TNTH6HQCZ+s-T9EGT4C8FC8J74X5T7CY|1594212767446&t:1594212767446&adb:adblk_no",'upgrade-insecure-requests': '1','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
}type_link = []
type_text = []type_link0,type_text0, end_link0 = get_link(url, hea)
if (end_link0 != 0):type_link.append(url)type_text.append(type_text0[0])print('新增:', type_text0[0])
else:for link1 in type_link0:  # 家具后 1 级-----卧室、客厅url = link1if (type_link0.index(link1) > 100):continuetype_link1,type_text0, end_link0 = get_link(url, hea)print('第一级:', type_text0)if (end_link0 != 0):type_link.append(url)type_text.append(type_text0[0])print('新增:', type_text0[0])continueelse:for link2 in type_link1:  # 家具后 2 级-----床、衣柜url = link2if (type_link1.index(link2) > 100):continuetype_link2,type_text0, end_link0 = get_link(url, hea)print('第二级:', type_text0)if (end_link0 != 0):type_link.append(url)type_text.append(type_text0[0])print('新增:', type_text0[0])continueelse:for link3 in type_link2:  # 家具后 3 级-----床头,床架url = link3if (type_link2.index(link3) > 100):continuetype_link3,type_text0, end_link0 = get_link(url, hea)print('第三级:', type_text0)if (end_link0 != 0):type_link.append(url)type_text.append(type_text0[0])print('新增:', type_text0[0])continueelse:for link4 in type_link3:  # 家具后 4 级-----Adjustable Bases、床板url = link4if (type_link3.index(link4) > 100):continuetype_link4,type_text0, end_link0 = get_link(url, hea)print('第四级:', type_text0)if (end_link0 != 0):type_link.append(url)type_text.append(type_text0[0])print('新增:', type_text0[0])continueelse:for link5 in type_link4:  # 家具后 5 级-----Adjustable Bases、床板url = link5if (type_link4.index(link5) > 100):continuetype_link5,type_text0, end_link0 = get_link(url, hea)print('第五级:', type_text0)if (end_link0 != 0):type_link.append(url)type_text.append(type_text0[0])print('新增:', type_text0[0])continueelse:for link6 in type_link5:  # 家具后 6 级-----Adjustable Bases、床板url = link6if (type_link5.index(link6) > 100):continuetype_link6,type_text0, end_link0 = get_link(url, hea)print('第六级:', type_text0)if (end_link0 != 0):type_link.append(url)type_text.append(type_text0[0])print('新增:', type_text0[0])continuedf = DataFrame({'类别': type_text,'链接': type_link    })path0 = 'C:/myfile/project/amazon_mining/data/排名链接.csv'
df.to_csv(path0, encoding='utf-8', index=False)  # 去掉index,保留头部

代码简要解析

def gethtml(url0,head)

gethtml函数是为了得到静态页面HTML,有对页面反应超时的情况做了些延时处理

def get_link(url, hea)

get_link函数是为了得到种类类型,以及下级种类链接,比如在DIY床及组件的页面可以获取其下一级种类的种类名称以及链接,还有是否是最小种类
type_link0:下一级种类链接
type_text:下一级种类名称
end_link:是否为最小种类(没有下级)

type_link0,type_text0, end_link0 = get_link(url, hea)
if (end_link0 != 0):type_link.append(url)type_text.append(type_text0[0])print('新增:', type_text0[0])
else:for link1 in type_link0:  # 家具后 1 级-----卧室、客厅url = link1if (type_link0.index(link1) > 100):continuetype_link1,type_text0, end_link0 = get_link(url, hea)print('第一级:', type_text0)

end_link0 != 0判断是否为最小种类,为是则添加种类名称以及链接
否则依次遍历下一种类,直到找到最小种类,添加,重复。

结果

得到所有家具种类的名称以及页面排名链接

下一篇博客将爬出所有页面的排名前100的商品信息

爬虫(一):用python爬取亚马逊所有家具种类前100名的商品信息(上)相关推荐

  1. 爬虫(二):用python爬取亚马逊所有家具种类前100名的商品信息(下)

    目标 亚马逊公司(Amazon),是美国最大的一家网络电子商务公司,位于华盛顿州的西雅图,是网络上最早开始经营电子商务的公司之一,现在已成为全球商品品种最多的网上零售商和全球第二大互联网企业. 本次目 ...

  2. python抓取亚马逊某个类目下Top 100排名的商品

    1.获取分页url 列表 2. 获取详情页url列表 3. 获取详情页数据 import requests from lxml import etree import urllib3 import t ...

  3. python 爬取亚马逊评论_用Python爬取了三大相亲软件评论区,结果...

    小三:怎么了小二?一副愁眉苦脸的样子. 小二:唉!这不是快过年了吗,家里又催相亲了 ... 小三:现在不是流行网恋吗,你可以试试相亲软件呀. 小二:这玩意靠谱吗? 小三:我也没用过,你自己看看软件评论 ...

  4. 使用python爬取亚马逊商品switch到货通知、价格,并发送email通知

    #!/usr/bin/env python # coding: utf-8# In[2]:import pandas as pd import requests from bs4 import Bea ...

  5. python爬取网页书籍名称代码_python爬取亚马逊书籍信息代码分享

    我有个需求就是抓取一些简单的书籍信息存储到mysql数据库,例如,封面图片,书名,类型,作者,简历,出版社,语种. 我比较之后,决定在亚马逊来实现我的需求. 我分析网站后发现,亚马逊有个高级搜索的功能 ...

  6. Python基于BeautifulSoup4库爬取亚马逊网页

    引言 我写的这个爬虫非常的简单,没有什么难的逻辑思维,只是简单运用BeautifulSoup进行爬取,相信初学者都可以看懂,就是代码写的比较乱,因为我也是初学者....可能你没有耐心看完,我会尽量一部 ...

  7. Python实现通过ASIN爬取亚马逊产品评论

    Python实现通过ASIN爬取亚马逊产品评论 一.最近一直在研究爬取亚马逊评论相关的信息,亚马逊的反爬机制还是比较严格的,时不时就封cookie啊封ip啊啥的.而且他们的网页排版相对没有那么规则,所 ...

  8. scrapy_redis分布式爬虫爬取亚马逊图书

    scrapy_redis分布式爬虫爬取亚马逊图书 最近在学习分布式爬虫,选取当当图书进行了一次小练习 网址,https://www.amazon.cn/gp/book/all_category/ref ...

  9. JAVA爬取亚马逊的商品信息

    在程序里面输入你想爬取的商品名字,就可以返回这件商品在亚马逊搜索中都所有相关商品的信息,包括名字和价格. 解决了在爬取亚马逊时候,亚马逊可以识别出你的爬虫,并返回503,造成只能爬取几个页面的问题. ...

最新文章

  1. 使用JNA,让java调用原生代码
  2. Redhat9安装firefox详解
  3. vsftpd类似wu-ftpd分类(Class)的配置-给不同网段的人以不同的上传权限-对虚拟用户进行访问IP限制...
  4. Angular中使用双向数据绑定操作表单的input、checkboc、radio、select、textarea实现简单的人员登记系统实例
  5. ubuntu64位 oracle 11g,64位Ubuntu安装Oracle11G
  6. python中格式化字符串
  7. 控制抽象之简化客户代码
  8. tomcat服务器配置优化
  9. 持久化策略RDB和AOF的简单理解
  10. 《数字图像处理 第三版》(冈萨雷斯)——第三章 灰度变换和空间滤波
  11. 大学C语言学习笔记(C语言程序设计第五版——谭浩强,翁凯C语言基础教程)基础、算法、程序结构、数组、函数、指针、枚举、结构、联合
  12. 怎么进计算机更新失败,系统更新失败无法进入系统怎么办?
  13. 使用Dragonfly上传Rails图片
  14. 网站网页不能正常显示图片或显示不完整的原因
  15. jetson nano 报错Illegal instruction(core dumped)
  16. 【BZOJ3470】Freda’s Walk
  17. [转]黄金圣斗士处女座沙加读解
  18. rtx3060ti参数配置
  19. Redis Zadd 命令
  20. 7位专家– 7条意见:Java 13的亮点是什么?

热门文章

  1. [QDialog]qt虚拟键盘的实现以及qdateedit实现打开虚拟键盘
  2. VB.NET MsgBox详解 vs2010
  3. R语言进行中文分词和聚类
  4. NAS如何进行磁盘碎片整理?
  5. 百度天气预报API接口的一个坑
  6. 计算机控制技术课程配套教材习题解答(第1、2、3章)
  7. Android之调节屏幕亮度
  8. Android图片加载框架 Glide 4 的用法
  9. 物联网到底为什么这么火?
  10. lib60870-IEC 60870-5-101 / 104 C源代码库用户指南-版本2.3.0--第一部分