网址:http://yp.120ask.com/search/-0-0--0-0-0-0.html
from pyspider.libs.base_handler import *class Handler(BaseHandler):crawl_config = {}@every(minutes=24 * 60)def on_start(self):#进入主页self.crawl('http://yp.120ask.com/search/-0-0--0-0-0-0.html', callback=self.list_page)
鼠标放在药品名字上面,右键审查元素
明显可以看到点击的网址在<a>标签里面 右键 copy CSS选择器,如果想拿到这一页的所有点击的URL,多copy几个
#gallery > ul > li:nth-child(1) > dl > dd.s_dd1 > a
#gallery > ul > li:nth-child(2) > dl > dd.s_dd1 > a
#gallery > ul > li:nth-child(5) > dl > dd.s_dd1 > a
把不同的地方去掉
#gallery > ul > li > dl > dd.s_dd1 > a
拿到所有翻页的URL,右键审查下一页的元素 ,copy CSS选择器
body > div.g-index-con.m1100.clears > div.p_contright.fr > div.s_pagediv > div > a.page-next
或者 写划横线的 a.page-next 也可以
@config(age=10 * 24 * 60 * 60)def list_page(self, response):#模拟点击药品for each in response.doc('#gallery > ul > li > dl > dd.s_dd1 > a').items():self.crawl(each.attr.href, callback=self.index_page)#模拟点击下一页 for each in response.doc('a.page-next').items():self.crawl(each.attr.href, callback=self.list_page)
所有的url 获取到后,抓取网页内的数据,使用pyquery 获取数据
@config(age=10 * 24 * 60 * 60)def index_page(self, response):res={}#药品通用名称res['药品通用名称']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p.name.clears > var > i:nth-child(1)').text()
#商品名称
res['商品名称']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p.name.clears > var > i:nth-child(2)').text()
#汉语拼音
res['汉语拼音']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p.name.clears > var > i:nth-child(3)').text()
#药品主要成分
res['主要成分']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(2) > var').text()
#药品性状
res['药品性状']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(3) > var').text()
#试用症
res['试用症']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(4) > var').text()
#主治疾病
res['主治疾病']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(5) > var').text()
#规格型号
res['规格型号']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(6) > var').text()
#用法用量
res['用法用量']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(7) > var').text()
#不良反应
res['不良反应']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(8) > var').text()
#禁忌
res['禁忌']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(9) > var').text()
#注意事项
res['注意事项']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(10) > var').text()
#药物互相作用
res['药物互相作用']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(11) > var').text()
#贮藏
res['贮藏']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(12) > var').text()
#有效期
res['有效期']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(13) > var').text()
#执行标准
res['执行标准']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(14) > var').text()
#批准文号
res['批准文号']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(15) > var').text()
#生产企业
res['生产企业']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(16) > var').text()
这里博主把抓取到的数据存到mongo中,建立字典res
保存数据到 drugsss_information 集合里面
self.save_data('drugsss_information',res)
下面是存入到mongoDB中的函数
def save_data(self,table_name,result):conn = MongoClient("localhost",27017) db = conn.Fast_ask_doctor_drugsprint table_nameposts = db[table_name]try:posts.insert(result)except Exception,e:print e
最后附上所有的代码
#!/usr/bin/env python # -*- encoding: utf-8 -*- # Created on 2016-10-18 11:09:15 # Project: Drug_informationfrom pyspider.libs.base_handler import * from pymongo import MongoClientclass Handler(BaseHandler):crawl_config = {}@every(minutes=24 * 60)def on_start(self):#进入主页self.crawl('http://yp.120ask.com/search/-0-0--0-0-0-0.html', callback=self.list_page)@config(age=10 * 24 * 60 * 60)def list_page(self, response):#模拟点击药品for each in response.doc('#gallery > ul > li > dl > dd.s_dd1 > a').items():self.crawl(each.attr.href, callback=self.index_page)#模拟点击下一页 for each in response.doc('a.page-next').items():self.crawl(each.attr.href, callback=self.list_page)@config(age=10 * 24 * 60 * 60)def index_page(self, response):res={}#药品通用名称res['药品通用名称']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p.name.clears > var > i:nth-child(1)').text()#商品名称res['商品名称']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p.name.clears > var > i:nth-child(2)').text()#汉语拼音res['汉语拼音']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p.name.clears > var > i:nth-child(3)').text()#药品主要成分res['主要成分']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(2) > var').text()#药品性状res['药品性状']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(3) > var').text()#试用症res['试用症']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(4) > var').text()#主治疾病res['主治疾病']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(5) > var').text()#规格型号res['规格型号']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(6) > var').text()#用法用量res['用法用量']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(7) > var').text()#不良反应res['不良反应']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(8) > var').text()#禁忌res['禁忌']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(9) > var').text()#注意事项res['注意事项']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(10) > var').text()#药物互相作用res['药物互相作用']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(11) > var').text()#贮藏res['贮藏']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(12) > var').text()#有效期res['有效期']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(13) > var').text()#执行标准res['执行标准']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(14) > var').text()#批准文号res['批准文号']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(15) > var').text()#生产企业res['生产企业']=response.doc('body > div.drugCont > div.partTwo.clears > div.partTwoLeft > div.drugDecri > div > p:nth-child(16) > var').text()#print resself.save_data('drugsss_information',res)def save_data(self,table_name,result):conn = MongoClient("localhost",27017) db = conn.Fast_ask_doctor_drugsprint table_nameposts = db[table_name]try:posts.insert(result)except Exception,e:print e