|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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源代码,不便于阅读。通过解析和格式化,我们可以清晰地看到每个商品的序号、价格和名称。
|
|