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 相关文章推荐
python删除列表内容
Aug 04 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
Nov 16 Python
python基础教程项目二之画幅好画
Apr 02 Python
python自定义函数实现一个数的三次方计算方法
Jan 20 Python
Python实现的序列化和反序列化二叉树算法示例
Mar 02 Python
python使用参数对嵌套字典进行取值的方法
Apr 26 Python
Python/Django后端使用PIL Image生成头像缩略图
Apr 30 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
Oct 11 Python
浅谈python中统计计数的几种方法和Counter详解
Nov 07 Python
python随机生成大小写字母数字混合密码(仅20行代码)
Feb 01 Python
python连接mongodb集群方法详解
Feb 13 Python
解决python3安装pandas出错的问题
May 20 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生成静态页面详解
2006/11/19 PHP
完美实现GIF动画缩略图的php代码
2011/01/02 PHP
php获取文章上一页与下一页的方法
2014/12/01 PHP
php 解决substr()截取中文字符乱码问题
2016/07/18 PHP
jquery拖动插件(jquery.drag)使用介绍
2013/06/18 Javascript
浅析JavaScript中的常用算法与函数
2013/11/21 Javascript
javascript 数字格式化输出的实现代码
2013/12/10 Javascript
js数值计算时使用parseInt进行数据类型转换(jquery)
2014/10/07 Javascript
javascript使用call调用微信API
2014/12/15 Javascript
JS判断字符串包含的方法
2015/05/05 Javascript
解析JavaScript中的字符串类型与字符编码支持
2016/06/24 Javascript
js判断节假日实例代码
2017/12/27 Javascript
JS加密插件CryptoJS实现AES加密操作示例
2018/08/16 Javascript
详解vue在项目中使用百度地图
2019/03/26 Javascript
微信小程序学习笔记之函数定义、页面渲染图文详解
2019/03/28 Javascript
vue+AI智能机器人回复功能实现
2020/07/16 Javascript
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
2020/11/09 Javascript
原生js实现移动小球(碰撞检测)
2020/12/17 Javascript
[02:17]2016完美“圣”典风云人物:Sccc专访
2016/12/03 DOTA
Django返回json数据用法示例
2016/09/18 Python
Python语言检测模块langid和langdetect的使用实例
2019/02/19 Python
关于pytorch中全连接神经网络搭建两种模式详解
2020/01/14 Python
美国折扣宠物药房:Total Pet Supply
2018/05/27 全球购物
英国美发和美容产品商城:HQhair
2019/02/08 全球购物
P/Invoke是什么
2015/07/31 面试题
大学毕业生简单自荐信
2013/11/05 职场文书
机械电子工程毕业生自荐信
2013/11/23 职场文书
11月红领巾广播稿
2014/01/17 职场文书
中学生操行评语
2014/04/24 职场文书
2014乡镇机关党员个人对照检查材料思想汇报
2014/10/09 职场文书
中学生社会实践教育活动总结
2015/05/06 职场文书
2015年乡镇工会工作总结
2015/05/19 职场文书
乡镇科协工作总结2015
2015/05/19 职场文书
python 实现两个变量值进行交换的n种操作
2021/06/02 Python
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python
JS数组方法some、every和find的使用详情
2021/10/05 Javascript