python爬取亚马逊书籍信息代码分享


Posted in Python onDecember 09, 2017

我有个需求就是抓取一些简单的书籍信息存储到mysql数据库,例如,封面图片,书名,类型,作者,简历,出版社,语种。

我比较之后,决定在亚马逊来实现我的需求。

我分析网站后发现,亚马逊有个高级搜索的功能,我就通过该搜索结果来获取书籍的详情URL。

由于亚马逊的高级搜索是用get方法的,所以通过分析,搜索结果的URL,可得到node参数是代表书籍类型的。field-binding_browse-bin是代表书籍装饰。

所以我固定了书籍装饰为平装,而书籍的类型,只能每次运行的时候,爬取一种类型的书籍难过

之后就是根据书籍详情页面利用正则表达式来匹配需要的信息了。

以下源代码,命名不是很规范。。。

import requests
import sys
import re
import pymysql

class product:
  type="历史"
  name=""
  author=""
  desciption=""
  pic1=""
  languages=""
  press=""

def getProUrl():
  urlList = []
  headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"}
  session = requests.Session()
  furl="https://www.amazon.cn/gp/search/ref=sr_adv_b/?search-alias=stripbooks&field-binding_browse-bin=2038564051&sort=relevancerank&page="
  for i in range(1,7):
    html=""
    print(furl+str(i)) 
    html = session.post(furl+str(i)+'&node=658418051',headers = headers)
    html.encoding = 'utf-8'
    s=html.text.encode('gb2312','ignore').decode('gb2312')
    url=r'</li><li id=".*?" data-asin="(.+?)" class="s-result-item celwidget">'
    reg=re.compile(url,re.M)
    items = reg.findall(html.text)
    for i in range(0,len(items)):
      urlList.append(items[i])
  urlList=set(urlList)
  return urlList

def getProData(url):
  pro = product()
  headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"}
  session = requests.Session()
  zurl="https://www.amazon.cn/dp/"
  html = session.get(zurl+url,headers = headers)
  html.encoding = 'utf-8'
  s=html.text.encode('gb2312','ignore').decode('gb2312')
  pro.pic1=getProPic(html)
  pro.name=getProName(html)
  pro.author=getProAuthor(html)
  pro.desciption=getProDescrip(html)
  pro.press=getProPress(html)
  pro.languages=getProLanguages(html)
  return pro

def getProPic(html):
  pic=r'id="imgBlkFront" data-a-dynamic-image="{"(.+?)".*?}"'
  reg=re.compile(pic,re.M)
  items = reg.findall(html.text)
  if len(items)==0:
    return ""
  else:
    return items[0]

def getProName(html):
  name=r'<div class="ma-title"><p class="wraptext goto-top">(.+?)<span'
  reg=re.compile(name,re.M)
  items = reg.findall(html.text)
  if len(items)==0:
    return ""
  else:
    return items[0]

def getProAuthor(html):
  author=r'<span class="author.{0,20}" data-width="".{0,30}>.*?<a class="a-link-normal" href=".*?books" rel="external nofollow" >(.+?)</a>.*?<span class="a-color-secondary">(.+?)</span>'
  reg=re.compile(author,re.S)
  items = reg.findall(html.text)
  au=""
  for i in range(0,len(items)):
    au=au+items[i][0]+items[i][1]
  return au

def getProDescrip(html):
  Descrip=r'<noscript>.{0,30}<div>(.+?)</div>.{0,30}<em></em>.{0,30}</noscript>.{0,30}<div id="outer_postBodyPS"'
  reg=re.compile(Descrip,re.S)
  items = reg.findall(html.text)
  if len(items)==0:
    return ""
  else:
    position = items[0].find('海报:')
    descrip=items[0]
    if position != -1:
      descrip=items[0][0:position]
    return descrip.strip()

def getProPress(html):
  press=r'<li><b>出版社:</b>(.+?)</li>'
  reg=re.compile(press,re.M)
  items = reg.findall(html.text)
  if len(items)==0:
    return ""
  else:
    return items[0].strip()


def getProLanguages(html):
  languages=r'<li><b>语种:</b>(.+?)</li>'
  reg=re.compile(languages,re.M)
  items = reg.findall(html.text)
  if len(items)==0:
    return ""
  else:
    return items[0].strip()

def getConnection():
  config = {
     'host':'121.**.**.**',
     'port':3306,
     'user':'root',
     'password':'******',
     'db':'home_work',
     'charset':'utf8',
     'cursorclass':pymysql.cursors.DictCursor,
     }
  connection = pymysql.connect(**config)
  return connection

urlList = getProUrl()
i = 0
for d in urlList:
  i = i + 1
  print (i)
  connection = getConnection()
  pro = getProData(d)
  try:
    with connection.cursor() as cursor:
      sql='INSERT INTO books (type,name,author,desciption,pic1,languages,press) VALUES (%s,%s,%s,%s,%s,%s,%s)'
      cursor.execute(sql,(pro.type,pro.name,pro.author,pro.desciption,pro.pic1,pro.languages,pro.press))
    connection.commit()
  finally:
    connection.close();

总结

以上就是本文关于python爬取亚马逊书籍信息代码分享的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
使用IronPython把Python脚本集成到.NET程序中的教程
Mar 31 Python
Python读取网页内容的方法
Jul 30 Python
详解Python中如何写控制台进度条的整理
Mar 07 Python
一份python入门应该看的学习资料
Apr 11 Python
Python不使用int()函数把字符串转换为数字的方法
Jul 09 Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
Dec 11 Python
Django CBV类的用法详解
Jul 26 Python
Python实现序列化及csv文件读取
Jan 19 Python
Django Model中字段(field)的各种选项说明
May 19 Python
Elasticsearch py客户端库安装及使用方法解析
Sep 14 Python
详解Python中string模块除去Str还剩下什么
Nov 30 Python
Python基础之函数嵌套知识总结
May 23 Python
matplotlib在python上绘制3D散点图实例详解
Dec 09 #Python
K-近邻算法的python实现代码分享
Dec 09 #Python
Python数据可视化编程通过Matplotlib创建散点图代码示例
Dec 09 #Python
python学习之matplotlib绘制散点图实例
Dec 09 #Python
Python学习pygal绘制线图代码分享
Dec 09 #Python
Python编程pygal绘图实例之XY线
Dec 09 #Python
同时安装Python2 &amp; Python3 cmd下版本自由选择的方法
Dec 09 #Python
You might like
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
2015/09/22 PHP
IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点
2009/12/27 Javascript
基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
2011/05/24 Javascript
jQuery实现id模糊查询的小例子
2013/03/19 Javascript
封装的jquery翻页滚动(示例代码)
2013/11/18 Javascript
js弹出div并显示遮罩层
2014/02/12 Javascript
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
2015/01/01 NodeJs
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
2016/07/22 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
2016/08/05 Javascript
JS简单获取当前年月日星期的方法示例
2017/02/07 Javascript
canvas实现探照灯效果
2017/02/07 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
在vue.js中抽出公共代码的方法示例
2017/06/08 Javascript
浅谈Webpack 是如何加载模块的
2018/05/24 Javascript
vue里如何主动销毁keep-alive缓存的组件
2019/03/21 Javascript
JS中的算法与数据结构之栈(Stack)实例详解
2019/08/20 Javascript
js实现贪吃蛇游戏 canvas绘制地图
2020/09/09 Javascript
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
搞笑的程序猿:看看你是哪种Python程序员
2015/06/12 Python
Python简单生成随机姓名的方法示例
2017/12/27 Python
Python3 修改默认环境的方法
2019/02/16 Python
django富文本编辑器的实现示例
2019/04/10 Python
django 消息框架 message使用详解
2019/07/22 Python
python读取raw binary图片并提取统计信息的实例
2020/01/09 Python
基于Html5实现的react拖拽排序组件示例
2018/08/13 HTML / CSS
美国折扣香水网站:The Perfume Spot
2020/12/12 全球购物
写一个在SQL Server创建表的SQL语句
2012/03/10 面试题
什么是表空间(tablespace)和系统表空间(System tablespace)
2013/02/25 面试题
后勤自我鉴定
2013/10/13 职场文书
会计电算化专业求职信
2014/06/10 职场文书
大学生学雷锋活动总结
2014/06/26 职场文书
关于读书的演讲稿500字
2014/08/27 职场文书
创先争优承诺书
2015/01/20 职场文书
单位同意报考证明
2015/06/17 职场文书
高老头读书笔记
2015/06/30 职场文书
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript