pythonアマゾンの簡単な書籍情報を取得
10690 ワード
私には、表紙の画像、本名、タイプ、著者、履歴書、出版社、言語など、簡単な書籍情報をmysqlデータベースに保存する必要があります.
私は比較して、アマゾンで私のニーズを実現することにしました.
サイトを分析したところ、アマゾンには高度な検索機能があり、この検索結果を通じて書籍の詳細なURLを取得していることがわかりました.
アマゾンの高度な検索はgetメソッドを用いるため,検索結果のURLを分析することでnodeパラメータが得られるのは書籍タイプを表す.field-binding_browse-binは書籍の装飾を代表しています.
だから私は本を固定して平装に飾って、本のタイプは、運行するたびに、1つのタイプの本を登るのが悲しいです.
その後、書籍の詳細ページに基づいて正規表現を用いて必要な情報をマッチングします.
以下のソースコードは、ネーミングが規範的ではありません...
私は比較して、アマゾンで私のニーズを実現することにしました.
サイトを分析したところ、アマゾンには高度な検索機能があり、この検索結果を通じて書籍の詳細なURLを取得していることがわかりました.
アマゾンの高度な検索はgetメソッドを用いるため,検索結果のURLを分析することでnodeパラメータが得られるのは書籍タイプを表す.field-binding_browse-binは書籍の装飾を代表しています.
だから私は本を固定して平装に飾って、本のタイプは、運行するたびに、1つのタイプの本を登るのが悲しいです.
その後、書籍の詳細ページに基づいて正規表現を用いて必要な情報をマッチングします.
以下のソースコードは、ネーミングが規範的ではありません...
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''
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'(.+?)
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'""
for i in range(0,len(items)):
au=au+items[i][0]+items[i][1]
return au
def getProDescrip(html):
Descrip=r'.{0,30}
reg=re.compile(author,re.S)
items = reg.findall(html.text)
au=
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' :(.+?) '
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' :(.+?) '
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();