pythonアマゾンの簡単な書籍情報を取得


私には、表紙の画像、本名、タイプ、著者、履歴書、出版社、言語など、簡単な書籍情報をmysqlデータベースに保存する必要があります.
私は比較して、アマゾンで私のニーズを実現することにしました.
サイトを分析したところ、アマゾンには高度な検索機能があり、この検索結果を通じて書籍の詳細な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'.*?(.+?).*?(.+?)' 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'

    (.+?)
    .{0,30}.{0,30}.{0,30}

    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();