利用requests库以及re正则表达式库对淘宝的商品信息进行爬取。
主要是对HTML页内的内容进行搜索,一种是之前用BeautifulSoup进行搜索,这里利用正则表达式直接进行匹配搜索。
观察到淘宝页面的搜索直接是URL+商品名称,跨页面是在其后&s=44的倍数
import requests import re #爬取页面的通用框架 def getHTMLText(url): try: r=requests.get(url,timeout=30) r.raise_for_status() r.encoding=r.apparent_encoding return r.text except: return "" #对获得的内容进行解析 def parsePage(ilt,html): try: #利用正则表示进行匹配"view_price:价格",下同 plt=re.findall(r'\"view_price\"\:\"[\d\.]*?\"',html) tlt=re.findall(r'\"raw_title\"\:\".*?\"',html) for i in range(len(plt)): #eval是去掉最外层的双引号或单引号, #split切割字符串,这里我们获得:后的值 price=eval(plt[i].split(':')[1]) title=eval(tlt[i].split(':')[1]) #将内容加入列表内 ilt.append([price, title]) except: print("") #显示爬取内容 def printGoodsList(ilt): #显示格式{:4}代表的是四个空格 tplt="{:4}\t{:8}\t{:16}" print(tplt.format("序号","价格","商品名称")) count=0 for g in ilt: count=count+1 print(tplt.format(count,g[0],g[1])) def main(): goods='书包' depth=5 #搜索URL start_url = 'https://s.taobao.com/search?q=' + goods infoList=[] for i in range(depth): try: #跨页面处理 url = start_url + '&s=' + str(44 * i) html=getHTMLText(url) parsePage(infoList,html) except: continue printGoodsList(infoList) if __name__ == '__main__': main()