最近去mooc看了北理工的那个爬虫教学视频 跟着做了爬取淘宝商品信息那个实例 老师讲的代码大部分都可以用 但由于现在淘宝要登录才能获取信息 所以还要添加一些代码才能得到信息
可以登录自己pc端淘宝后 f12查看cookie和header,把这两个信息加入代码头部就ok
代码如下:
import requests
import re
from bs4 import BeautifulSoup
def getHTMLText(url): #通用代码框架可以有效处理一些错误
try:
head = {
"cookie":"自己登陆查看cookie全复制进来就行",
"user-agent": "同理cookie"
}
r = requests.get(url,headers=head, timeout=30)
r.raise_for_status() #用它来产生异常信息。如果状态不是200,引发HTTPError异常
r.encoding = r.apparent_encoding #修改编码
return r.text
except:
return "" #有错误就会返回这个
def parsePage(ilt,html):
try:
t = re.findall(r'\"raw_title\"\:\".*?\"',html) #.*?是最小匹配,它只取得最后一个双引号为止的内部内容
p = re.findall(r'\"view_price\"\:\"[\d\.]*\"',html) #用反斜杠表示它引入了一个双引号 price是一个列表类型
for i in range(len(p)): #处理去掉view_price 字段,只获取价格数字部分
title = eval(t[i].split(':')[1])
price = eval(p[i].split(':')[1]) #eval函数可以将我们获得的字符串的最外层的引号去掉
#print(title,price)
ilt.append([title,price]) #将结果保存到列表中去
except:
print("")
def printGoodsList(ilt):
tplt = "{:4}\t{:36}\t{:8}" #打出来的每个位置长度
print(tplt.format("序号","标题","价格")) #打印输出信息的表头
count = 0
for g in ilt:
count = count + 1
print(tplt.format(count,g[0],g[1]))
if __name__ == '__main__':
bname = input("请输入要搜索的书名:")
page = 2
start_url = "https://s.taobao.com/search?q=" + bname
infoList = []
for i in range(page): #如果在这过程中发生了错误,可以继续执行不会终止程序
try:
url = start_url + "&s=" + str(44*i) #得把数字转化成字符串
html = getHTMLText(url)
parsePage(infoList,html)
except:
continue
printGoodsList(infoList)
over