马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
1.
plt=re.findall(r'\"view_price\"\:\"[\d\.]*\"',html) #观察源代码找到商品名称以及价格所在地,设计出正则表达式提取出商品名称以及价格。
tlt=re.findall(r'\"raw_title\"\:\".*?\"',html)
上面语句中\"view_price\"\:\"[\d\.]*\"和\"raw_title\"\:\".*?\"是什么意思?
2.
ilt是什么,为什么能追加列表?
ilt.append([price,title])
3.
tplt = "{:4}\t{:8}\t{:16}"
{:4}\t{:8}\t{:16}是什么意思?
4.
tplt.format("序号","价格","商品名称")是什么意思?
5.
url = start_url + '&s=' + str(44 * i) # 44是淘宝每个页面呈现的宝贝数量
上面语句中str(44 * i)是什么意思?
6.
printGoodsList(info_list)
为什么不直接打印get_html_text(url)?import requests
import re
def get_html_text(url):
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'} #爬虫头部伪装成浏览器头部,方便get到url
try:
coo = 'enc=edIQzA1s26222kIGPuWoQhOkbyCImebd7jSn9F1VH%2BCfHYhI990ZpdBlP%2BMdRMk%2FK8mn3FU0JuGv6BfrOiP4qA%3D%3D; cna=p2KZE5ukfyICAXLy+m8tZU45; tracknick=tb31958717; miid=2128311241709186772; thw=cn; _m_h5_tk=33f962b2a85bc7e874dbb0178f2eff1c_1676964628850; _m_h5_tk_enc=ef5d599f7fff2daccf9a943237997412; cookie2=1399a2d34e311507a2529ce8a75d185a; t=931dfb62f5d2fbc3f5e6cb718693b3d9; _tb_token_=36aa41ddb37be; _samesite_flag_=true; xlly_s=1; sgcookie=E100oSa2nHs6sQV0oikjf8gT8t4BsM7%2BViiKLUxvIx89jh4UgHRUpqUWG7V0UR3YBreBqYf6ZiuUmLBkgxGYd1z%2F3OOBQ5imIC6Zz0RHa6sEFwnPNtl8c%2BukNwolwoeTeF0q; unb=2655240623; uc3=nk2=F5RGNwFaZxrxHA%3D%3D&lg2=UtASsssmOIJ0bQ%3D%3D&vt3=F8dCvjygh3rUQwBF1HI%3D&id2=UU6kVqVyXyokyA%3D%3D; csg=93901321; lgc=tb31958717; cancelledSubSites=empty; cookie17=UU6kVqVyXyokyA%3D%3D; dnk=tb31958717; skt=a8aa5eb3bd48dd3c; existShop=MTY3Njk1NzQ3MA%3D%3D; uc4=nk4=0%40FY4NAqWJh2BvMr10d8W8Zo1Ndzhd&id4=0%40U2xpVFuqNqzkZAcqk4j%2BxmUJPPVY; _cc_=UIHiLt3xSw%3D%3D; _l_g_=Ug%3D%3D; sg=734; _nk_=tb31958717; cookie1=WvdGPl146UxKEGunckTeCsH8Q6XWriJKenzrlFwDsKs%3D; mt=ci=38_1; uc1=cookie15=U%2BGCWk%2F75gdr5Q%3D%3D&cookie16=VFC%2FuZ9az08KUQ56dCrZDlbNdA%3D%3D&cookie14=UoezScZpUrVgyw%3D%3D&existShop=false&pas=0&cookie21=V32FPkk%2FgihF%2FS5nr3O5; tfstk=cVqNBVt5WGINnHyAwDm4zxMsQdxOaDnm2BkjSsi_SUlfMp0IasVMMvxzq2uWLI0G.; l=fBjUvy8lgx5DTSn3KO5BPurza77TuIRb8ZVzaNbMiIEGa6sl1FGpLNCeyiVXRdtjgTCDoExPDzebsdhy-wUdgmyD-Jk_7qConxvtaQtJe; isg=BCwsaoGzYwvVtElPLfW7tDtR_Qpe5dCPD13ae4Zt5Fd6kc2bofTZH3hnsVkpNgjn'
cookies = {}
for line in coo.split(';'): # 浏览器伪装 同样是为了成功爬取页面
name, value = line.strip().split('=', 1)
cookies[name] = value
r = requests.get(url, cookies=cookies, headers=headers, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text)
return r.text
except:
return ''
def parsePage(ilt,html):
try:
plt=re.findall(r'"view_price"\:"[\d\.]*"',html) #观察源代码找到商品名称以及价格所在地,设计出正则表达式提取出商品名称以及价格。
tlt=re.findall(r'"raw_title"\:".*?"',html)
for i in range(len(plt)):
price=eval(plt[i].split(":")[1])
title=eval(tlt[i].split(":")[1])
ilt.append([price,title])
except:
print("")
def printGoodsList(ilt):
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]))
print("")
def main():
goods="书包"
depth=1
start_url="https://s.taobao.com/search?q="+goods
info_list = []
for i in range(depth):
try:
url = start_url + '&s=' + str(44 * i) # 44是淘宝每个页面呈现的宝贝数量
html = get_html_text(url)
parsePage(info_list, html)
except:
continue
printGoodsList(info_list)
main()
1、在这里,正则表达式\"view_price\"\:\"[\d\.]*\" 和 \"raw_title\"\:\".*?\"用于从HTML源代码中提取商品价格和标题。其中:
- \"view_price\"\:\"[\d\.]*\":匹配"view_price":"数字或点"这样的格式。[\d\.]*表示数字或点的重复0次或多次。
- \"raw_title\"\:\".*?\":匹配"raw_title":"任意字符"这样的格式。.*?表示任意字符的重复0次或多次,但是以最小重复次数为准。
2、ilt是一个列表,用于存储解析后的商品价格和标题信息。ilt.append([price, title])将商品价格和标题作为一个列表追加到ilt列表中。
3、{:4}\t{:8}\t{:16}表示用于格式化字符串的模板。其中,{:4}、{:8}、{:16}分别表示占用4个、8个、16个字符宽度的占位符,\t是制表符,用于分隔各个占位符。
4、tplt.format("序号", "价格", "商品名称")是将字符串模板tplt中的占位符替换为指定的值。这里将第一个占位符替换为"序号",第二个替换为"价格",第三个替换为"商品名称"。
5、str(44 * i)表示将整数44 * i转换为字符串。这里44表示淘宝每个页面显示的商品数量,i是循环变量。通过这个表达式,可以计算出每个页面的起始商品索引。
6、printGoodsList(info_list)打印格式化后的商品列表,而不是直接打印get_html_text(url),因为get_html_text(url)只是HTML源代码,不便于阅读。通过解析和格式化,我们可以清晰地看到每个商品的序号、价格和名称。
|