闲来无事扒个网页解闷
首先找个软柿子捏
亚马逊热销排行榜对爬虫的限制并不多
页面连ajx请求都不用发,更没用JS渲染,
只要有网址直接get出所有的数据
用的关于获取网页资源,只用到requests库

首先还是要先来看一下网页

每个爬虫新手遇到这样一个如此坦荡的网页,
都会觉得在JS横行的时代,这么天真朴素的网页真是出淤泥而不不染

首先谈思路

主页的链接是写死在代码里的,
解析第一页的时候,第一页的结尾会出现后面的页码和下一页,
首先遵循空间顺序解析出当前页的图书信息,然后找出下一页那个按钮对应的链接,
获取下一页的内容,重复上一步的动作
直到无下一页,获取亚马逊页面结束
然后从页面中获取书籍信息什么的都比较简单

开始上代码

import requests, gevent, random, time
from bs4 import BeautifulSoup
from gevent import monkey
monkey.patch_all()              # 打补丁

用request库获取页面
协程处理多任务
用soup解析页面
打补丁

    def __init__(self):self.url = "https://www.amazon.cn/gp/bestsellers/books/ref=sv_b_3#1"self.tasks_list = []            # 因为有页面请求等待时间,这个列表用来存储任务self.index = 1                  # 记录图书序号# 开始解析页面,当有下一页时,改变self.url,再次调用handle_page,直到无下一页self.handle_page()

实例初始化实现的功能都写在注释里了,这个类不能代码复用,所以在init里没写传参功能

    def get_page(self,url):"""输入链接返回resopnse.text不设防网页,简单构造请求头即可"""headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"}try:html = requests.get(url, headers=headers).textreturn htmlexcept Exception as e:print(e)return None

就是给requests的get方法加了个请求头,多个打印异常功能
不过返回的是resopnse.text不是response

    def handle_page(self):"""解析当前页面"""# 处理的是self.url 当前页资源获取完毕时,若得到下一页的链接,会改变这个值,再调用该函数html = self.get_page(self.url)if not html:                    # 若在取得下一页链接,但是获取页面失败,即停止gevent.joinall(self.tasks_list)# 处理当页图书soup = BeautifulSoup(html, "lxml")li_list = soup.select('li[class="zg-item-immersion"]')for li in li_list:img_url = li.select('img')[0].attrs['src']          # 图片链接book = li.select('img')[0].attrs['alt']             # 书名book = book.replace(":", "")                        # 书名去冒号,否则会路径错误author = li.select('span[class="a-size-small a-color-base"]')[0].get_text()      # 作者名path = "F:\A_code\Spider\Amazon\亚马逊热销前100/"+"%s" \"%s" \                                       "NO.%d.jpg"%(book, author, self.index)       # 拼接图片保存路径# 接下来就是获取链接与写入本地,需要传入链接和路径self.tasks_list.append(gevent.spawn(self.down_img, img_url, path))self.index += 1# 下一页问题a_last = soup.select('li[class="a-last"]')if a_last:# 如果有下一页,获取下一页地址a_href = a_last[0].select('a')[0].attrs['href']self.url = a_href                           # 切换要处理的地址self.handle_page()else:# 如果没有,说明任务加载完毕gevent.joinall(self.tasks_list)

**爬虫的主要功能在这个方法里
这个方法的逻辑是**

  1. 解析页面,获取当前页排行榜中的图书信息
  2. 图书信息包括,书名,作者,图片链接
  3. 根据书名作者,构建每个图书的写入路径
  4. 把链接与路径传入下载函数中
  5. 解析是否有下一页
  6. 存在下一页,改变self.url调用自身
  7. 不存在,认为已获取全部资源,joinall
  8. 若下一页获取失败,认为以获取全部资源,joinall
@staticmethoddef down_img(img_url, path):"""下载图片进本地"""time.sleep(random.randint(1, 2))                # 随机睡眠1,2秒避免访问频率过高img = requests.get(img_url).content             # 获取二进制资源with open(path, "wb")as f:                      # 二进制写入f.write(img)

一个简单的爬取类就写完了

amazon = Amazon_books()

最后,上一张爬取结果

代码我都是按顺序贴的,我就不再贴重贴完整代码了
欢迎大家一起讨论

爬虫---抓取亚马逊热销书籍前100相关推荐

  1. 如何使用代理IP进行数据采集,PHP爬虫抓取亚马逊商品数据

    本文关键词:代理IP,私密代理IP,私密代理IP数据采集 什么是代理?什么情况下会用到代理IP?如何使用代理IP进行数据采集 代理服务器的功能就是代理用户去获取网络信息,之后再把相应的信息反馈给客户. ...

  2. python爬虫外贸客户_python 爬虫抓取亚马逊数据

    1 #生成随机头 2 defrandHeader():3 head_connection = ['Keep-Alive', 'close']4 head_accept = ['text/html, a ...

  3. 爬取亚马逊评论_如何利用插件抓取亚马逊评论和关键词?

    如何抓取亚马逊的商品评价? 原本想给大家介绍使用市面上常见或者付费的爬虫工具,直到我发现了这个Chrome的免费插件 --Instant Data Scraper,当时我差点被感动哭了.比起学编程语言 ...

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

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

  5. python爬虫|爬取亚马逊商品库存数据(Selenium实战)

    前言 很多人把selenium爬虫称之为可视化爬虫,之所以这样认为,主要在于selenium爬虫主要是模拟人的点击操作,而selenium驱动浏览器并进行操作的过程是可以观察到的.换言之,就是你在看着 ...

  6. Python爬虫解析路径技巧-抓取亚马逊top-reviewers

    1.写爬虫最重要的一步就是解析需要抓取信息的xpath,我是比较习惯使用这个.大家可以安装一个xpath helper 2. 第一步上代码,我用的是jupyter notebook 以便边看html代 ...

  7. php怎么爬取亚马逊的数据,php 抓取亚马逊中国产品数据-标题,价格,首图片

    set_time_limit(0); date_default_timezone_set("Asia/shanghai"); //自定义抓取图片地址 $url = 'http:// ...

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

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

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

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

最新文章

  1. 面试Java后端开发的感受:如果就以平时项目经验来面试,通过估计很难——再论面试前的准备...
  2. python登录网站后爬取数据_用 Python 登录主流网站,我们的数据爬取少不了它
  3. 复方丙酸氯倍他索软膏購買技巧
  4. 五、Kafka 用户日志上报实时统计之应用概述
  5. Apollo进阶课程㊷丨Apollo实战——车辆与循迹驾驶能力实战
  6. 从北京回来的年轻人,我该告诉你点什么?
  7. 55个好习惯可令世界更美好(2)
  8. CSS 布局经典问题初步整理
  9. 【nodejs原理源码赏析(4)】深度剖析cluster模块源码与node.js多线程(上)
  10. 为什么MySQL不建议使用NULL作为列默认值?
  11. Flutter进阶—解析动画
  12. java执行db2命令_送你一份P6级Java面试题
  13. (转)开源的大文件上传组件NeatUpload
  14. 常用的几种数据库介绍
  15. 解决升级Chrome浏览器之后出现跨域错误:Access to xxx has been blocked by CORS policy: XXXX
  16. pdf转wordpptexceljpg图片pdf编辑器转换修改
  17. Windows开源Web服务器性能和压力测试工具
  18. 暑假来了,画一个日月地球的轨道模型给孩子们,秒懂四季更迭、日蚀月蚀
  19. MAC 权限Permission denied XXX
  20. 超好用,18 个 Jupyter Notebook 使用技巧助你快速腾飞

热门文章

  1. JavaScript箭头函数
  2. JavaScript 箭头函数与function函数区别
  3. Unity 代码混淆Obfuscation
  4. (翻译)权威模式(Authority)
  5. 虚拟信用卡危及整个国内信用体系
  6. Java学习笔记 --- 字符类型
  7. JSch实现sftp上传文件
  8. 蓝牙控制STM32平衡车(一,硬件和程序实现)
  9. 云胶片(云影像)功能简介
  10. python 保存本地乱码,解决python保存数据到csv文件中文乱码的方法