有位中医站长想要大量的中药价格数据,于是找上了我,花了一会儿时间用 Python 给他写了个简单的采集程序,最近忙着写问答功能一直没时间更新文章,导致百度流量下滑,今天拿来水一水,充充数。程序仅供参考学习,请勿用于商业用途!
直接上代码
复制
#!/usr/bin/python3 # -*- coding: UTF-8 -*- import requests from bs4 import BeautifulSoup import openpyxl import time #准备Excel wb=openpyxl.Workbook() wb.create_sheet(index=0,title='药材') sheet=wb.worksheets[0] excelnum=0 header={ "Cookie":"PHPSESSID=XXXXX", } #取页码 r=requests.get('http://www.yaocaicang.com/product_class.php?ClassID=639',headers=header) gksoup = BeautifulSoup(r.text, "html") strn=gksoup.find("div",attrs={"class":"Paging"}) li=strn.find_all("li") page=li[len(li)-2].text print(page) for i in range(1, int(page),1): r=requests.get('http://www.yaocaicang.com/product/639-0-0-0-0-0-0-0-0-0-0-'+str(i)+'.html',headers=header) gksoup = BeautifulSoup(r.text, "html") strn=gksoup.find("div",attrs={"class":"productList"}) a=strn.find_all('a') for j in range(len(a)): excelnum=excelnum+1 url="http://www.yaocaicang.com"+a[j].get("href") #print(url) r=requests.get(url,headers=header) gksoup = BeautifulSoup(r.text, "html") strn=gksoup.find("div",attrs={"class":"commodity_Details_cs ml20"}) strn.find('a').decompose() name=strn.find("h3").text.strip() print(name) jiagehtml=strn.find("div",attrs={"class":"jiage"}) jgspan=jiagehtml.find_all("span") if len(jgspan)>1: jgspan[0].find('em').decompose() cljg=jgspan[0].text jgspan[1].find('em').decompose() zjjg=jgspan[1].text print("拆零:"+cljg) print("整件:"+zjjg) gghtml=strn.find("div",attrs={"class":"pyys"}) gginfo=gghtml.find_all("span") gg=gginfo[1].find("small").text print("规格:"+gg) sheet.cell(excelnum,1,name) sheet.cell(excelnum,2,cljg) sheet.cell(excelnum,3,zjjg) sheet.cell(excelnum,4,gg) curtime=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) wb.save(curtime+'.xlsx')
简单解释一下,由于目标站需要登录才能查看价格信息,所以这里为了节约时间直接使用了cookies
登录。整个程序使用了 requests
网络请求模块,BeautifulSoup
网页解析模块,openpyxl
表格excel操作模块。模块相关安装教程这里就不说了,个人建议使用pip工具安装,十分快捷简单。详见Centos7.X升级默认Python到3.X并安装pip3扩展管理
最后的采集效果如下图所示
评论 (0)