网址: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_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_information from pyspider.libs.base_handler import *
from pymongo import MongoClient 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) @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

pyspider 简单应用之快速问医生药品抓取(一)的更多相关文章

  1. Python爬虫入门教程 24-100 微医挂号网医生数据抓取

    1. 写在前面 今天要抓取的一个网站叫做微医网站,地址为 https://www.guahao.com ,我们将通过python3爬虫抓取这个网址,然后数据存储到CSV里面,为后面的一些分析类的教程做 ...

  2. 使用Chrome快速实现数据的抓取(四)——优点

    些一个抓取WEB页面的数据程序比较简单,大多数语言都有相应的HTTP库,一个简单的请求响应即可,程序发送Http请求给Web服务器,服务器返回HTML文件.交互方式如下: 在使用DevProtocol ...

  3. 使用Chrome快速实现数据的抓取(三)——JQuery

    使用Chrome抓取页面一个非常方便的地方就是它可以执行JS,也就是说我们可以通过JS函数获取我们想要的数据.一个非常强大易用的库就是Jquery,本文就简单的介绍一下使用Chrome获取数据时Jqu ...

  4. 使用Chrome快速实现数据的抓取(五)—— puppeteer

    如果要以自动化的方式驱动Chrome进行数据抓取,必须实现Chrome Dev Protocol协议的客户端.这个协议本身并不复杂,我在之前的文章中也简单的介绍过一下. Google本身有一个Node ...

  5. 使用Chrome快速实现数据的抓取(二)——协议

    在前面的文章简单的介绍了一下Chrome调试模式的启动方式,但前面的API只能做到简单的打开,关闭标签操作,当我们需要对某个标签页进行详细的操作时,则需要用到页面管理API.首先我们还是来回顾下获取页 ...

  6. 使用Chrome快速实现数据的抓取(一)——概述

    对于一些简单的网页,我们可以非常容易的通过Develop Tool来获取其请求报文规律,并仿照其构建报文来获取页面信息.但是,随着网页越来越复杂,许多页面是由js动态渲染生成的.要获取这类信息,则需要 ...

  7. 《编程快速上手》--web抓取--利用webbrowser模块的mapIT.py

    1.代码如下 #! python3 # mapIT.py - Launches a map in the browser using an address from the # command lin ...

  8. Python实现简单的网页抓取

    现在开源的网页抓取程序有很多,各种语言应有尽有. 这里分享一下Python从零开始的网页抓取过程 第一步:安装Python 点击下载适合的版本https://www.python.org/ 我这里选择 ...

  9. 利用JS跨域做一个简单的页面訪问统计系统

    事实上在大部分互联网web产品中,我们一般会用百度统计或者谷歌统计分析系统,通过在程序中引入特定的JS脚本,然后便能够在这些统计系统中看到自己站点页面详细的訪问情况.可是有些时候,因为一些特殊情况,我 ...

随机推荐

  1. Basic linux command-with detailed sample

    Here I will list some parameters which people use very ofen, I will attach the output of the command ...

  2. Yii 多个子目录同步登录

    ---恢复内容开始--- 配置文件中:  1 'components'=>array( 'user'=>array( 'class'=>'CWebUser', 'identityCo ...

  3. C#类的继承,方法的重载和覆写

    在网易云课堂上看到唐大仕老师讲解的关于类的继承.方法的重载和覆写的一段代码,注释比较详细,在此记下以加深理解. 小总结: 1.类的继承:允许的实例化方式:Student t=new Student() ...

  4. NethServer 7.2 RC1,增加深度数据包检测

    NethServer 7.2 RC1 "Saltimbocca"  发布了,NethServer是基于CentOS的面向服务器的Linux发行.该产品的主要特性是模块化的设计,这使 ...

  5. 获取 view所在的VC

    - (UIViewController*)viewController { for (UIView* next = [self superview]; next; next = next.superv ...

  6. 浅谈大数据神器Spark中的RDD

    1.究竟什么是RDD呢? 有人可能会回答是:Resilient Distributed Dataset.没错,的确是如此.但是我们问这个实际上是想知道RDD到底是个什么东西?以及它到底能干嘛?好的,有 ...

  7. Android数据持久化技术 — — —文件存储

    文件保存 package com.example.datastroredtest; import android.app.Activity;import android.os.Bundle;impor ...

  8. 向通知栏发送通知点击跳转并传递数据(PendingIntent)传递数据

    // 为发送通知的按钮的点击事件定义事件处理方法 public void send() {///// 第一步:获取NotificationManager NotificationManager nm ...

  9. window 下如何安装ghost博客

    1.安装nodejs # Node v0.12.x and v4.2+ LTS - supported 我本地安装的是4.2 安装其他版本可能提示系统不兼容 2.安装mysql 3.安装bower 4 ...

  10. hdu1004

    Problem Description Contest time again! How excited it is to see balloons floating around. But to te ...