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脚本实现代码行数统计代码分享
Mar 10 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
Jun 01 Python
解决pyinstaller打包发布后的exe文件打开控制台闪退的问题
Jun 21 Python
安装好Pycharm后如何配置Python解释器简易教程
Jun 28 Python
Pytorch实现各种2d卷积示例
Dec 30 Python
VScode连接远程服务器上的jupyter notebook的实现
Apr 23 Python
2020最新pycharm汉化安装(python工程狮亲测有效)
Apr 26 Python
Python正则表达式如何匹配中文
May 27 Python
Python grequests模块使用场景及代码实例
Aug 10 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
Nov 13 Python
Pycharm 如何设置HTML文件自动补全代码或标签
May 21 Python
浅析Django接口版本控制
Jun 26 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
对javascript和select部件的结合运用
2006/10/09 PHP
PHP中unset,array_splice删除数组中元素的区别
2014/07/28 PHP
php+ajax实现带进度条的上传图片功能【附demo源码下载】
2016/09/14 PHP
PHP XML和数组互相转换详解
2016/10/26 PHP
setTimeout和setInterval的浏览器兼容性分析
2007/02/27 Javascript
50款非常棒的 jQuery 插件分享
2012/03/29 Javascript
JavaScript实现的多个图片广告交替显示效果代码
2015/09/04 Javascript
JavaScript判断对象是否为数组
2015/12/22 Javascript
javascript实现下拉提示选择框
2015/12/29 Javascript
理解Angular数据双向绑定
2016/01/10 Javascript
jQuery div拖拽用法实例
2016/01/14 Javascript
JavaScript SweetAlert插件实现超酷消息警告框
2016/01/28 Javascript
js判断复选框是否选中及选中个数的实现代码
2016/05/30 Javascript
Bootstrap table右键功能实现方法
2017/02/20 Javascript
Nodejs 获取时间加手机标识的32位标识实现代码
2017/03/07 NodeJs
ES6中Math对象新增的方法实例详解
2017/04/25 Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
2018/01/12 Javascript
原生JS实现自定义下拉单选选择框功能
2018/10/12 Javascript
JS实现深度优先搜索求解两点间最短路径
2019/01/17 Javascript
nodejs检测因特网是否断开的解决方案
2019/04/17 NodeJs
vue-router 控制路由权限的实现
2020/09/24 Javascript
Python中如何优雅的合并两个字典(dict)方法示例
2017/08/09 Python
Python实现检测文件MD5值的方法示例
2018/04/11 Python
python+webdriver自动化环境搭建步骤详解
2019/06/03 Python
python文件选择对话框的操作方法
2019/06/27 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
详解Flask前后端分离项目案例
2020/07/24 Python
Python自动巡检H3C交换机实现过程解析
2020/08/14 Python
Python模块常用四种安装方式
2020/10/20 Python
CSS3实现任意图片lowpoly动画效果实例
2017/05/11 HTML / CSS
波兰灯具、照明和LED购物网站:Lampy.pl
2019/03/11 全球购物
培训讲师岗位职责
2014/04/13 职场文书
学习十八大宣传标语
2014/10/09 职场文书
公司老总年会致辞
2015/07/30 职场文书
CSS实现单选折叠菜单功能
2021/11/01 HTML / CSS
淡雅古典唯美少女娇媚宁静迷人写真
2022/03/21 杂记