第一步:注册一个你的账号
第二步:登录账号
第三步:发现我们要找的数据在https://db.yaozh.com/zhongyaocai/1.html这个网页里,一共10225条数据其实就只用修改这个网页的最后那个数字就行。
第四步:按F12再按F5检查元素,找到一个带请求头部的元素,复制你的cookie
第五步:抓取一个网页的中药材标题及内容
from bs4 import BeautifulSoup import urllib import requests header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.12 Safari/535.11'} cookie={'cookie':'你的cookie'} value=[] th=[] afterURL = "https://db.yaozh.com/zhongyaocai/600.html" # 想要爬取的登录后的页面 html = requests.get(afterURL,cookies=cookie, headers = header).text # 获得登陆后的响应信息,使用之前的cookie bsobj=BeautifulSoup(html) f=bsobj.findAll("span",{"class":"toFindImg"}) #抓取的属性内容 items=bsobj.findAll("th",{"class":"detail-table-th"}) #抓取的标题 for i in f: #获得一个内容list new=i.get_text() k=new.replace(' ', '') #去空格 k2=k.replace('\n', '') #去换行符 value.append(k2) for item in items: #获得一个标签list new=item.get_text() k=new.replace(' ', '') k2=k.replace('\n', '') th.append(k2) dic={} #将标题和内容以字典键值对形式对应 for i in range(len(th)): dic[th[i]] = value[i] #由于每个页面的中药的特征值都不同,所以这里我用的方法不是很好。用null值替代没有出现的特征值,防止之后数据错位。好像可以用mongo来处理。 result=[] if ('药材名称' in dic): result.append(dic['药材名称']) else : result.append('null') if ('汉语拼音' in dic): result.append(dic['汉语拼音']) else : result.append('null') if ('英文名' in dic): result.append(dic['英文名']) else : result.append('null') if ('拉丁文名' in dic): result.append(dic['拉丁文名']) else : result.append('null') if ('原拉丁植物动物矿物名' in dic): result.append(dic['原拉丁植物动物矿物名']) else : result.append('null') if ('药材别名' in dic): result.append(dic['药材别名']) else : result.append('null') if ('药材类别' in dic): result.append(dic['药材类别']) else : result.append('null') if ('药材来源' in dic): result.append(dic['药材来源']) else : result.append('null') if ('分布' in dic): result.append(dic['分布']) else : result.append('null') if ('鉴别' in dic): result.append(dic['鉴别']) else : result.append('null') if ('化学成分' in dic): result.append(dic['化学成分']) else : result.append('null') if ('药理作用' in dic): result.append(dic['药理作用']) else : result.append('null') if ('性味归经' in dic): result.append(dic['性味归经']) else : result.append('null') if ('功能主治' in dic): result.append(dic['功能主治']) else : result.append('null') if ('注意事项' in dic): result.append(dic['注意事项']) else : result.append('null') if ('附方' in dic): result.append(dic['附方']) else : result.append('null') if ('名家论述' in dic): result.append(dic['名家论述']) else : result.append('null') if ('现代临床研究' in dic): result.append(dic['现代临床研究']) else : result.append('null') if ('摘录' in dic): result.append(dic['摘录']) else : result.append('null') print(result)