python爬取亚马逊书籍信息代码分享
我有个需求就是抓取一些简单的书籍信息存储到mysql数据库,例如,封面图片,书名,类型,作者,简历,出版社,语种。
我比较之后,决定在亚马逊来实现我的需求。
我分析网站后发现,亚马逊有个高级搜索的功能,我就通过该搜索结果来获取书籍的详情URL。
由于亚马逊的高级搜索是用get方法的,所以通过分析,搜索结果的URL,可得到node参数是代表书籍类型的。field-binding_browse-bin是代表书籍装饰。
所以我固定了书籍装饰为平装,而书籍的类型,只能每次运行的时候,爬取一种类型的书籍难过
之后就是根据书籍详情页面利用正则表达式来匹配需要的信息了。
以下源代码,命名不是很规范。。。
importrequests
importsys
importre
importpymysql
classproduct:
type="历史"
name=""
author=""
desciption=""
pic1=""
languages=""
press=""
defgetProUrl():
urlList=[]
headers={"User-Agent":"Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/50.0.2661.102Safari/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="
foriinrange(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)
foriinrange(0,len(items)):
urlList.append(items[i])
urlList=set(urlList)
returnurlList
defgetProData(url):
pro=product()
headers={"User-Agent":"Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/50.0.2661.102Safari/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)
returnpro
defgetProPic(html):
pic=r'id="imgBlkFront"data-a-dynamic-image="{"(.+?)".*?}"'
reg=re.compile(pic,re.M)
items=reg.findall(html.text)
iflen(items)==0:
return""
else:
returnitems[0]
defgetProName(html):
name=r'(.+?).*?(.+?).*?(.+?) '
reg=re.compile(author,re.S)
items=reg.findall(html.text)
au=""
foriinrange(0,len(items)):
au=au+items[i][0]+items[i][1]
returnau
defgetProDescrip(html):
Descrip=r'.{0,30}出版社:(.+?)'
reg=re.compile(press,re.M)
items=reg.findall(html.text)
iflen(items)==0:
return""
else:
returnitems[0].strip()
defgetProLanguages(html):
languages=r'语种:(.+?) '
reg=re.compile(languages,re.M)
items=reg.findall(html.text)
iflen(items)==0:
return""
else:
returnitems[0].strip()
defgetConnection():
config={
'host':'121.**.**.**',
'port':3306,
'user':'root',
'password':'******',
'db':'home_work',
'charset':'utf8',
'cursorclass':pymysql.cursors.DictCursor,
}
connection=pymysql.connect(**config)
returnconnection
urlList=getProUrl()
i=0
fordinurlList:
i=i+1
print(i)
connection=getConnection()
pro=getProData(d)
try:
withconnection.cursor()ascursor:
sql='INSERTINTObooks(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爬取亚马逊书籍信息代码分享的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:
matplotlib在python上绘制3D散点图实例详解
python的unittest测试类代码实例
Python编程实现使用线性回归预测数据
如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!