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实现电子词典
Apr 23 Python
Python利用多进程将大量数据放入有限内存的教程
Apr 01 Python
解决python2.7用pip安装包时出现错误的问题
Jan 23 Python
Python基于scapy实现修改IP发送请求的方法示例
Jul 08 Python
Python实现的选择排序算法原理与用法实例分析
Nov 22 Python
python操作excel的包(openpyxl、xlsxwriter)
Jun 11 Python
python之验证码生成(gvcode与captcha)
Jan 02 Python
一文了解Python并发编程的工程实现方法
May 31 Python
python代码编写计算器小程序
Mar 30 Python
Python如何生成xml文件
Jun 04 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
Jun 12 Python
Python中Yield的基本用法
Oct 18 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 curl批处理及多请求并发实现方法分析
2018/08/15 PHP
jQuery 学习入门篇附实例代码
2010/03/16 Javascript
JavaScript中的面向对象介绍
2012/06/30 Javascript
JavaScript高级程序设计(第3版)学习笔记 概述
2012/10/11 Javascript
解析JSON对象与字符串之间的相互转换
2013/12/18 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
在WordPress中加入Google搜索功能的简单步骤讲解
2016/01/04 Javascript
利用Bootstrap实现表格复选框checkbox全选
2016/12/21 Javascript
详解NodeJS框架express的路径映射(路由)功能及控制
2017/03/24 NodeJs
JS基于正则表达式的替换操作(replace)用法示例
2017/04/28 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
2017/07/12 jQuery
angular中ui calendar的一些使用心得(推荐)
2017/11/03 Javascript
微信小程序录音与播放录音功能
2017/12/25 Javascript
Node.js 实现远程桌面监控的方法步骤
2019/07/02 Javascript
基于Node的Axure文件在线预览的实现代码
2019/08/28 Javascript
关于layui导航栏不展示下拉列表的解决方法
2019/09/25 Javascript
laydate只显示时分 不显示秒的功能实现方法
2019/09/28 Javascript
node.js使用http模块创建服务器和客户端完整示例
2020/02/10 Javascript
python使用BeautifulSoup分析网页信息的方法
2015/04/04 Python
python图像处理之反色实现方法
2015/05/30 Python
python字典基本操作实例分析
2015/07/11 Python
对Python中的@classmethod用法详解
2018/04/21 Python
解决python matplotlib imshow无法显示的问题
2018/05/24 Python
python读取文件指定行内容实例讲解
2020/03/02 Python
Python搭建Keras CNN模型破解网站验证码的实现
2020/04/07 Python
解决python中显示图片的plt.imshow plt.show()内存泄漏问题
2020/04/24 Python
python编写softmax函数、交叉熵函数实例
2020/06/11 Python
基于CSS3的CSS 多栏(Multi-column)实现瀑布流源码分享
2014/06/11 HTML / CSS
毕业求职自荐信格式是什么
2013/11/19 职场文书
平安校园建设方案
2014/05/02 职场文书
高中生自我评价范文2015
2015/03/03 职场文书
简历自荐信范文
2015/03/09 职场文书
2014年个人年终总结
2015/03/09 职场文书
吃通javascript正则表达式
2021/04/21 Javascript
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang
MySQL数据库⾼可⽤HA实现小结
2022/01/22 MySQL