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天气预报采集器实现代码(网页爬虫)
Oct 07 Python
Python与Redis的连接教程
Apr 22 Python
Python算法输出1-9数组形成的结果为100的所有运算式
Nov 03 Python
python对excel文档去重及求和的实例
Apr 18 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
May 26 Python
使用tensorflow实现线性svm
Sep 07 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
Feb 11 Python
Django 大文件下载实现过程解析
Aug 01 Python
python2爬取百度贴吧指定关键字和图片代码实例
Aug 14 Python
python双端队列原理、实现与使用方法分析
Nov 27 Python
python如何调用php文件中的函数详解
Dec 29 Python
Python中非常使用的6种基本变量的操作与技巧
Mar 22 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
php5 pdo新改动加载注意事项
2008/09/11 PHP
关于PHP开发的9条建议
2015/07/27 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
2016/01/07 PHP
PHP屏蔽关键字实现方法
2016/11/17 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
2017/02/20 PHP
PHP实现生成推广海报的方法详解
2018/03/14 PHP
浅谈laravel aliases别名的原理
2019/10/24 PHP
JS操作Cookies包括(读取添加与删除)
2012/12/26 Javascript
JavaScript获得url查询参数的方法
2015/07/02 Javascript
jQuery平滑旋转幻灯片特效代码分享
2015/09/07 Javascript
jquery实现移动端点击图片查看大图特效
2020/09/11 Javascript
基于JavaScript实现图片点击弹出窗口而不是保存
2016/02/06 Javascript
移动端 一个简单易懂的弹出框
2016/07/06 Javascript
轻松掌握JavaScript策略模式
2016/08/25 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
js中开关变量使用实例
2017/02/24 Javascript
angular select 默认值设置方法
2017/06/23 Javascript
微信小程序slider组件使用详解
2018/01/31 Javascript
简单了解小程序+node梳理登陆流程
2019/06/24 Javascript
Python计算一个文件里字数的方法
2015/06/15 Python
如何用itertools解决无序排列组合的问题
2017/05/18 Python
python使用两种发邮件的方式smtp和outlook示例
2017/06/02 Python
python3.6 实现AES加密的示例(pyCryptodome)
2018/01/10 Python
Python运维开发之psutil库的使用详解
2018/10/18 Python
Django使用模板后无法找到静态资源文件问题解决
2019/07/19 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
2020/05/25 Python
Django DRF APIView源码运行流程详解
2020/08/17 Python
Python通用唯一标识符uuid模块使用案例
2020/09/10 Python
基于Python实现全自动下载抖音视频
2020/11/06 Python
Django跨域请求原理及实现代码
2020/11/14 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
2021/01/28 Python
纯css3实现宠物小鸡实例代码
2018/10/08 HTML / CSS
毕业生求职找工作的自我评价范文
2013/11/27 职场文书
干部培训自我鉴定
2014/01/22 职场文书
圣诞节活动策划方案
2014/06/09 职场文书
2016庆祝国庆67周年宣传语
2015/11/25 职场文书