python爬取亞馬遜書籍信息代碼分享
我有個需求就是抓取一些簡單的書籍信息存儲到mysql數(shù)據(jù)庫,例如,封面圖片,書名,類型,作者,簡歷,出版社,語種。
我比較之后,決定在亞馬遜來實現(xiàn)我的需求。
我分析網(wǎng)站后發(fā)現(xiàn),亞馬遜有個高級搜索的功能,我就通過該搜索結(jié)果來獲取書籍的詳情URL。
由于亞馬遜的高級搜索是用get方法的,所以通過分析,搜索結(jié)果的URL,可得到node參數(shù)是代表書籍類型的。field-binding_browse-bin是代表書籍裝飾。
所以我固定了書籍裝飾為平裝,而書籍的類型,只能每次運行的時候,爬取一種類型的書籍難過
之后就是根據(jù)書籍詳情頁面利用正則表達式來匹配需要的信息了。
以下源代碼,命名不是很規(guī)范。。。
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();
總結(jié)
以上就是本文關(guān)于python爬取亞馬遜書籍信息代碼分享的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:
Python編程實現(xiàn)使用線性回歸預測數(shù)據(jù)
如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關(guān)文章
Python+selenium點擊網(wǎng)頁上指定坐標的實例
今天小編就為大家分享一篇Python+selenium點擊網(wǎng)頁上指定坐標的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07Python列表原理與用法詳解【創(chuàng)建、元素增加、刪除、訪問、計數(shù)、切片、遍歷等】
這篇文章主要介紹了Python列表原理與用法,結(jié)合實例形式詳細分析了Python列表的創(chuàng)建、元素增加、刪除、訪問、計數(shù)、切片、遍歷、排序等各種常見操作技巧與使用注意事項,需要的朋友可以參考下2019-10-10Python3控制路由器——使用requests重啟極路由.py
通過本文給大家介紹Python3控制路由器——使用requests重啟極路由.py的相關(guān)知識,代碼寫了相應的注釋,以后再寫成可以方便調(diào)用的模塊,感興趣的朋友一起學習吧2016-05-05Python通用函數(shù)實現(xiàn)數(shù)組計算的方法
數(shù)組的運算可以進行加減乘除,同時也可以將這些算數(shù)運算符進行任意的組合已達到效果。這篇文章主要介紹了Python通用函數(shù)實現(xiàn)數(shù)組計算的代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧2019-06-06