前段时间收到两个各项任务,要用wordpress+woocommerce创建数百个B2C公交站点,公交站点上能有足够多的货品统计数据。我总之是有他们项目组的,但是现阶段我的项目组就只有我和除此之外两个同僚。那个各项任务的症结是货品统计数据,具体来说想不到的是收集。试著了卢戈韦和八爪鱼,发现并无法满足用户我的市场需求。只好急于用python3来试一试。
虽然并非开发人员,但是我对流程的许多业务流程和路子还是较为介绍的,对于那个各项任务,我的路子是:
第二步:把文本抓下来。
截取网页用requests组件就可以实现了。即使我们要抓的文本闻所未闻是两个网页,所以更要考量循环式截取。
第三步:把文本甄选出来。
一已经开始考量用二阶,而后有意从一两本书上看见,说BeautifulSoup才是最合适的。
第三步:把文本存起来。
即使引入wordpress须要某一的csv文档格式,这里须要考量的就是如何留存为csv文档格式,更要某一的文档格式。
有了下面的大架构,还须要考量许多技术细节问题。比如说互联网不太好的这时候咋办?比如说当取走文本的这时候,文档被挤占后无法取走统计数据咋办?
具体内容的叙述较为累,现在直接发布标识符:
import requests,bs4,csv,os,re,time
收集货品url
def shopifylist(url):
while True:
try:
res=requests.get(url,timeout=30)
res.encoding = res.apparent_encoding
print(允诺,url,状况,res.status_code)
res.raise_for_status()#如果回到状况并非200,则放出极度
break
except:
timeout=3
print(镜像失利,等候,timeout,秒重传)
time.sleep(timeout)
print()
print(再次镜像中)
print(镜像通畅,已经开始以获取货品镜像)
noStarchSoup=bs4.BeautifulSoup(res.text,html.parser)#html.parser 选定解释器
url=noStarchSoup.select(.product-card.sc-pb-element)
for i in range(len(url)):
imgurl=https://tribalhollywood.com+url[i].get(href)
print(以获取产品url)
shopify(imgurl,site)#调用收集文本方法
print(\n)
收集货品url结束
收集货品文本已经开始
def shopify(url,site):
print(已经开始允诺产品网页,url)
while True:
try:
res=requests.get(url,timeout=30)
res.encoding = res.apparent_encoding
print(成功允诺货品网页:,res.status_code)
res.raise_for_status()#如果下载发生问题,就放出极度
break
except:
print(允诺货品网页,url,失利,再次镜像)
noStarchSoup=bs4.BeautifulSoup(res.text,html.parser)
#匹配class属性为‘wc-block-grid__product-title’的文本
name=noStarchSoup.select(.product-single__title)
name=name[0].getText()
price=noStarchSoup.select(.product-single__price)
price=price[0].getText()
price=re.sub(,,price)
price=re.sub(\n,,price)
#特别注意class="rte product-single__description"只须要product-single__description
des=noStarchSoup.select(.product-single__description)
des=des[0].getText()
des=re.sub(Hollywood,customadd.com,des)#替换版权信息
img=noStarchSoup.select(#ProductThumbs-product-template img)
if img==[]:
img=noStarchSoup.select(.sc-pb-element1)
l=img[0].get(src)
l=http:+l
l=re.sub(_960x,,l)
else:
l=[]
for i in range(len(img)):
imgurl=img[i].get(src)
imgurl=re.sub(_160x160,,imgurl)
l.append(https:+imgurl)
l=,.join(l)
fileHeader=[标题,产品url,价格,叙述,图片]
file=[name,url,price,des,l]
#文档存储的地方,文档夹须要事先创建,并选定文档的文档格式为utf-8
while True:
try:
csvFile=open(site,a,encoding=utf-8)
break
except:
print()
print(site+文档写入失利,重传中。。。。。)
time.sleep(5)
size=os.path.getsize(site)#判断文档大小,如果文档大于0则表示文档有内
writer=csv.writer(csvFile)
if size==0:
writer.writerow(fileHeader)
writer.writerow(file)
csvFile.close()
else:
writer.writerow(file)
csvFile.close()
print(收集成功!)
收集文本结束
#urlpro=str(input(输入要收集的货品列表))
urlpro=https://www.tribalhollywood.com/collections/mens-necklaces
site=D:\Backup\桌面\python3\mens-necklaces1.csv
nt=[我并非空的]
n=1
while nt!=[]:
url=urlpro+?page=+str(n)
prourl=shopifylist(url)#调用收集列表方法
print(成功收集,n,页)
n=n+1
res=requests.get(url)
res.raise_for_status()
noStarchSoup=bs4.BeautifulSoup(res.text,html.parser)
nt=noStarchSoup.select(.next)
print(全部收集完毕!!)
献丑了。喜欢玩python3的朋友可以一起交流,我的博客叫:高天宋 http://xinzhesi.com