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 相关文章推荐
wxpython中自定义事件的实现与使用方法分析
Jul 21 Python
python3实现抓取网页资源的 N 种方法
May 02 Python
利用Python读取txt文档的方法讲解
Jun 23 Python
Pandas GroupBy对象 索引与迭代方法
Nov 16 Python
opencv实现图片模糊和锐化操作
Nov 19 Python
Django集成搜索引擎Elasticserach的方法示例
Jun 04 Python
Django REST framework内置路由用法
Jul 26 Python
基于python框架Scrapy爬取自己的博客内容过程详解
Aug 05 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
Jan 21 Python
解决python调用自己文件函数/执行函数找不到包问题
Jun 01 Python
基于Django快速集成Echarts代码示例
Dec 01 Python
OpenCV-Python实现人脸美白算法的实例
Jun 11 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 源代码压缩小工具
2009/12/22 PHP
php in_array 函数使用说明与in_array需要注意的地方说明
2010/04/13 PHP
模板引擎正则表达式调试小技巧
2011/07/20 PHP
php实现文件下载功能的几个代码分享
2014/05/10 PHP
destoon实现公司新闻详细页添加评论功能的方法
2014/07/15 PHP
简单介绍PHP的责任链编程模式
2015/08/11 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
2016/07/21 PHP
无缝滚动改进版支持上下左右滚动(封装成函数)
2012/12/04 Javascript
setInterval与clearInterval的使用示例代码
2014/01/28 Javascript
Jquery Uploadify上传带进度条的简单实例
2014/02/12 Javascript
JavaScript控制各种浏览器全屏模式的方法、属性和事件介绍
2014/04/03 Javascript
js读取cookie方法总结
2014/10/31 Javascript
javascript无刷新评论实现方法
2015/05/13 Javascript
浅谈JS原型对象和原型链
2016/03/02 Javascript
javascript 广告移动特效的实现代码
2016/06/25 Javascript
node.js连接MongoDB数据库的2种方法教程
2017/05/17 Javascript
Vue触发式全局组件构建的方法
2018/11/28 Javascript
javascript实现贪吃蛇小练习
2020/07/05 Javascript
[09:13]DOTA2-DPC中国联赛 正赛 Ehome vs Magma 选手采访 1月19日
2021/03/11 DOTA
Pyramid添加Middleware的方法实例
2013/11/27 Python
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
python使用MQTT给硬件传输图片的实现方法
2019/05/05 Python
django 通过url实现简单的权限控制的例子
2019/08/16 Python
python 发送json数据操作实例分析
2019/10/15 Python
如何用python爬取微博热搜数据并保存
2021/02/20 Python
美国床垫和床上用品公司:Nest Bedding
2017/06/12 全球购物
巴西男士胡须和头发护理产品商店:Beard
2017/11/13 全球购物
Servlet的实例是在生命周期什么时候创建的?配置servlet最重要的是什么?
2012/05/30 面试题
综艺节目策划方案
2014/06/13 职场文书
职工年度考核评语
2014/12/31 职场文书
实习推荐信格式模板
2015/03/27 职场文书
信贷客户经理岗位职责
2015/04/09 职场文书
2015年教师业务工作总结
2015/05/26 职场文书
职场新人刚入职工作总结该怎么写?
2019/05/15 职场文书
5道关于python基础 while循环练习题
2021/11/27 Python