先贴代码
注意:现在还不能运行,要先填写user-agent与cookie部分,然后才能运行,关于如何查看user-agent与cookie在文末有链接。
import requests
import re
def getHTMLText(url):
try:
header={
'user-agent':'Mozilla/5.0',
'cookie':'_samesite_flag_=true; *************************'}
r=requests.get(url,headers=header,timeout=30)
#添加了更改headers的代码,可以避免被淘宝验证信息拦截
r.raise_for_status()
r.encoding=r.apparent_encoding
return r.text
except:
return ""
def parsePage(ilt,html):
try:
plt=re.findall(r'\"view_price\"\:\"[\d\.]*"',html)
#'\'具有转义作用,在“、“、:等转义符号前使用,可以将其声明为文本义,
#[\d\.]*分割为[\d(任意一个数字)\(或者).(小数点)]*(出现0次至无数次)
#意思是:任意数字或者小数点出现0次至无数次,包括了浮点数和整数.
tlt=re.findall(r'\"raw_title\"\:\".*?"',html)
#'\'意义同上, '.*?'的意思是:任意一个字符出现0次至无数次(非贪婪模式)
#贪婪模式:在整个表达式匹配成功的前提下,依然尽可能多的去匹配(找到能用的,还要继续找,直到找到最长的)
#非贪婪模式:在整个表达式匹配成功的前提下,尽可能少的去匹配(找到匹配的,能用就行,用最短的)
for i in range(len(plt)):
price=eval(plt[i].split(':')[1])
#findall函数以列表类型返回所有匹配的字符串
#例子: ['"view_price1":"100.00"','"view_price2":"200.00"'],
#先取出其中一个元素'"view_price1":"100.00"',然后以':'分割成两个成'"view_price1"和"100.00"',
#取倒数第一个,也就是价格,使用eval函数去掉"100.00"'的单引号,成为标准字符串形式”100.00“
title=eval(tlt[i].split(':')[1])
#取商品名
ilt.append([price,title])
#以列表形式在列表ilt中存储价格和商品名,ilt=[[”10.00“,”a“],[”20.00“,”b“]]
except:
print("")
def printGoodlist(ilt):
tplt="{:4}\t{:8}\t{:16}"
#\t的含义是:一个\t相当于8个空格,跳到下一个位置,
#{:4}\t{:8}\t{:16}控制字符串宽度为4、8、16,如果若给出的宽度小于字符串本身的宽度,会按照字符串本身的宽度进行显示
print(tplt.format("序号","价格","商品名称"))
count=0
for g in ilt:#g是列表形式
count=count+1
print(tplt.format(count,g[0],g[1]))#tplt.format(1,"10.00","a")
def main():
goods='书包'#可随便更改
depth=2 #爬取深度即页数
start_url='https://s.taobao.com/search?q=' + goods
indolist=[]
for i in range(depth):
try:
url=start_url + '&s=' + str(44*i)#使其符合翻页后的url链接
html=getHTMLText(url)#得到html页面
parsePage(indolist,html)#将html页面的商品信息提取并存入infolist列表内
except:
continue
printGoodlist(indolist)#打印出infolist内的商品信息
main()
这个程序是我在上课后,收集资料+改写+参考别人代码得到的最终版本,关于代码的解释基本全都放在了注释部分
参考资料:
查看网页的user—agent和cookie:(6条消息) 问题解决:查看网页的cookie和user-agent_Mr.Q_LuLu的博客-CSDN博客
正则表达式中'\'的作用:(6条消息) java正则表达式中\_liang0000zai的专栏-CSDN博客
贪婪与非贪婪:(6条消息) 正则表达式之 贪婪与非贪婪模式详解(概述)_smileit的博客-CSDN博客_贪婪 非贪婪
format函数的作用:(6条消息) format函数用法详解_PT、小小马的博客-CSDN博客_format函数用法
正则表达式find_all函数:(6条消息) Python re.findall() 函数正则表达式(一)_Rich Dad的博客-CSDN博客