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编程实现使用线性回归预测数据
如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!