pyspider 简单应用之快速问医生药品抓取(一)

2023-11-26 05:59

本文主要是介绍pyspider 简单应用之快速问医生药品抓取(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

网址: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

 

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

这篇关于pyspider 简单应用之快速问医生药品抓取(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/425225

相关文章

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Python中yield的用法和实际应用示例

《Python中yield的用法和实际应用示例》在Python中,yield关键字主要用于生成器函数(generatorfunctions)中,其目的是使函数能够像迭代器一样工作,即可以被遍历,但不会... 目录python中yield的用法详解一、引言二、yield的基本用法1、yield与生成器2、yi

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除