博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pyspider 简单应用之快速问医生药品抓取(一)
阅读量:5836 次
发布时间:2019-06-18

本文共 9158 字,大约阅读时间需要 30 分钟。

网址: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 获取到后,抓取网页内的数据,基本上用response.doc('').text() 就可以获取到页面的数据了,括号内的引号的地方就填要抓取内容的标签 CSS 选择器

@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_drugs                print table_name        posts = 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 res        self.save_data('drugsss_information',res)                    def save_data(self,table_name,result):                conn = MongoClient("localhost",27017)         db = conn.Fast_ask_doctor_drugs                print table_name        posts = db[table_name]                try:                        posts.insert(result)        except Exception,e:            print e

 

转载于:https://www.cnblogs.com/Vergissmeinnicht/p/6231942.html

你可能感兴趣的文章
UVA-10212 The Last Non-zero Digit. 分解质因子+容斥定理
查看>>
NG-ZORRO 使用相关
查看>>
Hadoop_09_HDFS 的 NameNode工作机制
查看>>
java传值和传址
查看>>
【CF】7 Beta Round D. Palindrome Degree
查看>>
UITableView中使用selectRowAtIndexPath: animated: scrollPosition:出现的问题
查看>>
c# 实现ComboBox自动模糊匹配
查看>>
使用WITH AS提高性能简化嵌套SQL
查看>>
15.02.13-代码小技巧
查看>>
android 与JS之间的交互
查看>>
插入排序
查看>>
pytorch导入错误so: undefined symbol: _Z11libshm_initPKc
查看>>
Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader)
查看>>
动态实现类(对数据库的增删改查)
查看>>
再次写给VC++ Windows开发者
查看>>
nux driver model ----- platform
查看>>
js正则
查看>>
Bitmap Image Graphics
查看>>
连上篇,编辑页
查看>>
(Unsupported class version number [52.0] (maximum 51.0, Java 1.7))
查看>>