Python爬取当当、京东、亚马逊图书信息代码实例

注:1.本程序采用MSSQLserver数据库存储,请运行程序前手动修改程序开头处的数据库链接信息

2.需要bs4、requests、pymssql库支持

3.支持多线程

from bs4 import BeautifulSoup
import re,requests,pymysql,threading,os,traceback 

try:
  conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='book',charset="utf8")
  cursor = conn.cursor()
except:
  print('\n错误:数据库连接失败') 

#返回指定页面的html信息
def getHTMLText(url):
  try:
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}
    r = requests.get(url,headers = headers)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    return r.text
  except:
    return ''
#返回指定url的Soup对象
def getSoupObject(url):
  try:
    html = getHTMLText(url)
    soup = BeautifulSoup(html,'html.parser')
    return soup
  except:
    return ''
#获取该关键字在图书网站上的总页数
def getPageLength(webSiteName,url):
  try:
    soup = getSoupObject(url)
    if webSiteName == 'DangDang':
      a = soup('a',{'name':'bottom-page-turn'})
      return a[-1].string
    elif webSiteName == 'Amazon':
      a = soup('span',{'class':'pagnDisabled'})
      return a[-1].string
  except:
    print('\n错误:获取{}总页数时出错...'.format(webSiteName))
    return -1 

class DangDangThread(threading.Thread):
  def __init__(self,keyword):
    threading.Thread.__init__(self)
    self.keyword = keyword
  def run(self):
    print('\n提示:开始爬取当当网数据...')
    count = 1 

    length = getPageLength('DangDang','http://search.dangdang.com/?key={}'.format(self.keyword))#总页数
    tableName = 'db_{}_dangdang'.format(self.keyword) 

    try:
      print('\n提示:正在创建DangDang表...')
      cursor.execute('create table {} (id int ,title text,prNow text,prPre text,link text)'.format(tableName))
      print('\n提示:开始爬取当当网页面...')
      for i in range(1,int(length)):
        url = 'http://search.dangdang.com/?key={}&page_index={}'.format(self.keyword,i)
        soup = getSoupObject(url)
        lis = soup('li',{'class':re.compile(r'line'),'id':re.compile(r'p')})
        for li in lis:
          a = li.find_all('a',{'name':'itemlist-title','dd_name':'单品标题'})
          pn = li.find_all('span',{'class': 'search_now_price'})
          pp = li.find_all('span',{'class': 'search_pre_price'}) 

          if not len(a) == 0:
            link = a[0].attrs['href']
            title = a[0].attrs['title'].strip()
          else:
            link = 'NULL'
            title = 'NULL' 

          if not len(pn) == 0:
            prNow = pn[0].string
          else:
            prNow = 'NULL' 

          if not len(pp) == 0:
            prPre = pp[0].string
          else:
            prPre = 'NULL'
          sql = "insert into {} (id,title,prNow,prPre,link) values ({},'{}','{}','{}','{}')".format(tableName,count,title,prNow,prPre,link)
          cursor.execute(sql)
          print('\r提示:正在存入当当数据,当前处理id:{}'.format(count),end='')
          count += 1
          conn.commit()
    except:
      pass 

class AmazonThread(threading.Thread):
  def __init__(self,keyword):
    threading.Thread.__init__(self)
    self.keyword = keyword 

  def run(self):
    print('\n提示:开始爬取亚马逊数据...')
    count = 1
    length = getPageLength('Amazon','https://www.amazon.cn/s/keywords={}'.format(self.keyword))#总页数
    tableName = 'db_{}_amazon'.format(self.keyword) 

    try:
      print('\n提示:正在创建Amazon表...')
      cursor.execute('create table {} (id int ,title text,prNow text,link text)'.format(tableName)) 

      print('\n提示:开始爬取亚马逊页面...')
      for i in range(1,int(length)):
        url = 'https://www.amazon.cn/s/keywords={}&page={}'.format(self.keyword,i)
        soup = getSoupObject(url)
        lis = soup('li',{'id':re.compile(r'result_')})
        for li in lis:
          a = li.find_all('a',{'class':'a-link-normal s-access-detail-page a-text-normal'})
          pn = li.find_all('span',{'class': 'a-size-base a-color-price s-price a-text-bold'})
          if not len(a) == 0:
            link = a[0].attrs['href']
            title = a[0].attrs['title'].strip()
          else:
            link = 'NULL'
            title = 'NULL' 

          if not len(pn) == 0:
            prNow = pn[0].string
          else:
            prNow = 'NULL' 

          sql = "insert into {} (id,title,prNow,link) values ({},'{}','{}','{}')".format(tableName,count,title,prNow,link)
          cursor.execute(sql)
          print('\r提示:正在存入亚马逊数据,当前处理id:{}'.format(count),end='')
          count += 1
          conn.commit()
    except:
      pass 

class JDThread(threading.Thread):
  def __init__(self,keyword):
    threading.Thread.__init__(self)
    self.keyword = keyword
  def run(self):
    print('\n提示:开始爬取京东数据...')
    count = 1 

    tableName = 'db_{}_jd'.format(self.keyword) 

    try:
      print('\n提示:正在创建JD表...')
      cursor.execute('create table {} (id int,title text,prNow text,link text)'.format(tableName))
      print('\n提示:开始爬取京东页面...')
      for i in range(1,100):
        url = 'https://search.jd.com/Search?keyword={}&page={}'.format(self.keyword,i)
        soup = getSoupObject(url)
        lis = soup('li',{'class':'gl-item'})
        for li in lis:
          a = li.find_all('div',{'class':'p-name'})
          pn = li.find_all('div',{'class': 'p-price'})[0].find_all('i') 

          if not len(a) == 0:
            link = 'http:' + a[0].find_all('a')[0].attrs['href']
            title = a[0].find_all('em')[0].get_text()
          else:
            link = 'NULL'
            title = 'NULL' 

          if(len(link) > 128):
            link = 'TooLong' 

          if not len(pn) == 0:
            prNow = '¥'+ pn[0].string
          else:
            prNow = 'NULL'
          sql = "insert into {} (id,title,prNow,link) values ({},'{}','{}','{}')".format(tableName,count,title,prNow,link)
          cursor.execute(sql)
          print('\r提示:正在存入京东网数据,当前处理id:{}'.format(count),end='')
          count += 1
          conn.commit()
    except :
      pass
def closeDB():
  global conn,cursor
  conn.close()
  cursor.close() 

def main():
  print('提示:使用本程序,请手动创建空数据库:Book,并修改本程序开头的数据库连接语句')
  keyword = input("\n提示:请输入要爬取的关键字:") 

  dangdangThread = DangDangThread(keyword)
  amazonThread = AmazonThread(keyword)
  jdThread = JDThread(keyword)
   dangdangThread.start()
  amazonThread.start()
  jdThread.start()
  dangdangThread.join()
  amazonThread.join()
  jdThread.join()
   closeDB()
   print('\n爬取已经结束,即将关闭....')
  os.system('pause') 

main() 

示例截图:

关键词:Android下的部分运行结果(以导出至Excel)

总结

以上就是本文关于Python爬取当当、京东、亚马逊图书信息代码实例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

python爬取亚马逊书籍信息代码分享

Python爬虫实例爬取网站搞笑段子

Python探索之爬取电商售卖信息代码示例

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

(0)

相关推荐

  • 深入理解Python分布式爬虫原理

    首先,我们先来看看,如果是人正常的行为,是如何获取网页内容的. (1)打开浏览器,输入URL,打开源网页 (2)选取我们想要的内容,包括标题,作者,摘要,正文等信息 (3)存储到硬盘中 上面的三个过程,映射到技术层面上,其实就是:网络请求,抓取结构化数据,数据存储. 我们使用Python写一个简单的程序,实现上面的简单抓取功能. #!/usr/bin/python #-*- coding: utf-8 -*- ''''' Created on 2014-03-16 @author: Kris '

  • Python爬取附近餐馆信息代码示例

    本代码主要实现抓取大众点评网中关村附近的餐馆有哪些,具体如下: import urllib.request import re def fetchFood(url): # 模拟使用浏览器浏览大众点评的方式浏览大众点评 headers = {'User-Agent', 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'} ope

  • 利用python爬取斗鱼app中照片方法实例

    前言 没想到python是如此强大,令人着迷,以前看见图片总是一张一张复制粘贴,现在好了,学会python就可以用程序将一张张图片,保存下来. 最近看到斗鱼里的照片都不错,决定用最新学习的python技术进行爬取,下面将实现的过程分享出来供大家参考,下面话不多说了,来一起看看详细的介绍吧. 方法如下: 首先下载一个斗鱼(不下载也可以,url都在这了对吧) 通过抓包,抓取到一个json的数据包,得到下面的地址 观察测试可知,通过修改offset值就是相当于app的翻页 访问这个url,返回得到的是

  • Python抓取框架Scrapy爬虫入门:页面提取

    前言 Scrapy是一个非常好的抓取框架,它不仅提供了一些开箱可用的基础组建,还能够根据自己的需求,进行强大的自定义.本文主要给大家介绍了关于Python抓取框架Scrapy之页面提取的相关内容,分享出来供大家参考学习,下面随着小编来一起学习学习吧. 在开始之前,关于scrapy框架的入门大家可以参考这篇文章:http://www.jb51.net/article/87820.htm 下面创建一个爬虫项目,以图虫网为例抓取图片. 一.内容分析 打开 图虫网,顶部菜单"发现" "

  • python爬取亚马逊书籍信息代码分享

    我有个需求就是抓取一些简单的书籍信息存储到mysql数据库,例如,封面图片,书名,类型,作者,简历,出版社,语种. 我比较之后,决定在亚马逊来实现我的需求. 我分析网站后发现,亚马逊有个高级搜索的功能,我就通过该搜索结果来获取书籍的详情URL. 由于亚马逊的高级搜索是用get方法的,所以通过分析,搜索结果的URL,可得到node参数是代表书籍类型的.field-binding_browse-bin是代表书籍装饰. 所以我固定了书籍装饰为平装,而书籍的类型,只能每次运行的时候,爬取一种类型的书籍难

  • python登录并爬取淘宝信息代码示例

    本文主要分享关于python登录并爬取淘宝信息的相关代码,还是挺不错的,大家可以了解下. #!/usr/bin/env python # -*- coding:utf-8 -*- from selenium import webdriver import time import datetime import traceback import logging import os from selenium.webdriver.common.action_chains import ActionC

  • Python中Scrapy爬虫图片处理详解

    下载图片 下载图片有两种方式,一种是通过 Requests 模块发送 get 请求下载,另一种是使用 Scrapy 的 ImagesPipeline 图片管道类,这里主要讲后者. 安装 Scrapy 时并没有安装图像处理依赖包 Pillow,需手动安装否则运行爬虫出错. 首先在 settings.py 中设置图片的存储路径: IMAGES_STORE = 'D:/' 图片处理相关的选项还有: # 图片最小高度和宽度设置,可以过滤太小的图片 IMAGES_MIN_HEIGHT = 110 IMAG

  • Python爬虫实现爬取京东手机页面的图片(实例代码)

    实例如下所示: __author__ = 'Fred Zhao' import requests from bs4 import BeautifulSoup import os from urllib.request import urlretrieve class Picture(): def __init__(self): self.headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleW

  • Python爬取当当、京东、亚马逊图书信息代码实例

    注:1.本程序采用MSSQLserver数据库存储,请运行程序前手动修改程序开头处的数据库链接信息 2.需要bs4.requests.pymssql库支持 3.支持多线程 from bs4 import BeautifulSoup import re,requests,pymysql,threading,os,traceback try: conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root',

  • 用Python获取亚马逊商品信息

    目录 引言 一.获取亚马逊列表页的信息 二.获取详情页信息 三.代理设置 四.全部代码 总结 引言 亚马逊网站相较于国内的购物网站,可以直接使用python的最基本的requests进行请求.访问不是过于频繁,在未触发保护机制的情况下,可以获取我们想要的数据.本次通过以下三部分简单介绍下基本爬取流程: 使用requests的get请求,获取亚马逊列表和详情页的页面内容使用css/xpath对获取的内容进行解析,取得关键数据动态IP的作用及其使用方法 一.获取亚马逊列表页的信息 以游戏区为例: 获

  • 用Python爬取QQ音乐评论并制成词云图的实例

    环境:Ubuntu16.4 python版本:3.6.4 库:wordcloud 这次我们要讲的是爬取QQ音乐的评论并制成云词图,我们这里拿周杰伦的等你下课来举例. 第一步:获取评论 我们先打开QQ音乐,搜索周杰伦的<等你下课>,直接拉到底部,发现有5000多页的评论. 这时候我们要研究的就是怎样获取每页的评论,这时候我们可以先按下F12,选择NetWork,我们可以先点击小红点清空数据,然后再点击一次,开始监控,然后点击下一页,看每次获取评论的时候访问获取的是哪几条数据.最后我们就能看到下图

  • python 爬取哔哩哔哩up主信息和投稿视频

    项目地址: https://github.com/cgDeepLearn/BilibiliCrawler 项目特点 采取了一定的反反爬策略. Bilibili更改了用户页面的api, 用户抓取解析程序需要重构. 快速开始 拉取项目, git clone https://github.com/cgDeepLearn/BilibiliCrawler.git 进入项目主目录,安装虚拟环境crawlenv(请参考使用说明里的虚拟环境安装). 激活环境并在主目录运行crawl,爬取结果将保存在data目录

  • 亚马逊经典面试题实例详解

    亚马逊面试题: 如下所示的Map中,0代表海水,1代表岛屿,其中每一个岛屿与其八领域的区间的小岛能相连组成岛屿群.写代码,统计Map中岛屿个数. /* Q1. Map [ 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 ] */ 实现代码: #include<iostream> #include<queue> using namespace

  • python爬取王者荣耀全皮肤的简单实现代码

    相信现在很多人都喜欢玩王者荣耀这款手游,里面好看的皮肤令人爱不释手.那么你有没有想过把王者荣耀高清皮肤设置为壁纸,像下面这样 今天就来教大家如何利用python16行代码,实现王者荣耀全部高清皮肤的下载. 具体的操作分为两步: 1. 找到皮肤图片的地址 2. 下载图片 1. 寻找皮肤图片的地址 1. 找到英雄列表 百度"王者荣耀"进入官网 https://pvp.qq.com/.这里以Goole Chrome浏览器为例,在更多工具中选择开发者工具,或直接按F12进入调试界面,然后按F5

  • python2爬取百度贴吧指定关键字和图片代码实例

    目的:在百度贴吧输入关键字和要查找的起始结束页,获取帖子里面楼主所发的图片 思路: 获取分页里面的帖子链接列表 获取帖子里面楼主所发的图片链接列表 保存图片到本地 注意事项: 问题:在谷歌浏览器使用xpath helper插件时有匹配结果,但在程序里面使用python内带的xpath匹配却为空的原因. 原因:不同服务器会对不同的浏览器返回不同的数据,导致在谷歌浏览器看到的和服务器返回的有区别 解决方法:使用IE浏览器的User-agenet,而且越老的版本,报错几率相对越小 #!/usr/bin

  • 基于Python获取亚马逊的评论信息的处理

    目录 一.分析亚马逊的评论请求 二.获取亚马逊评论的内容 三.亚马逊评论信息的处理 四.代码整合 4.1代理设置 4.2while循环翻页 总结 上次亚马逊的商品信息都获取到了,自然要看一下评论的部分.用户的评论能直观的反映当前商品值不值得购买,亚马逊的评分信息也能获取到做一个评分的权重. 亚马逊的评论区由用户ID,评分及评论标题,地区时间,评论正文这几个部分组成,本次获取的内容就是这些. 测试链接:https://www.amazon.it/product-reviews/B08GHGTGQ2

随机推荐