北京艾丽斯妇科医院(http://fuke.fuke120.com/)

首先先说一下配置splash

1.利用pip安装scrapy-splash库

pip install scrapy-splash

2.现在就要用到另一个神器(Docker)

Docker下载地址:https://www.docker.com/community-edition#/windows

3.安装好Docker后启动Docker拉取镜像

docker pull scrapinghub/splash

4.利用Docker运行splash

docker run -p 8050:8050 scrapinghub/splash(运行之后大家可以去浏览器输入http://192.168.99.100:8050检查Docker是否正确)

5settings.py配置

SPLASH_URL = 'http://192.168.99.100:8050'(重中之重,一个大坑,一定要注意这个IP就是192.168.99.100,我就一直用的自己IP一直没运行成功)
DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
} SPIDER_MIDDLEWARES = {
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
} DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter' HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
ROBOTSTXT_OBEY = True(此处注意,有的网站是True,而有的网站需要把它改成False)

 爬虫的py文件1.py

# -*- coding: utf-8 -*-
import re
from urllib.request import urlopen
from scrapy.http import Request
# from urllib.request import Request
from bs4 import BeautifulSoup
from lxml import etree
import pymongo
import scrapy
from scrapy.selector import HtmlXPathSelector client = pymongo.MongoClient(host="127.0.0.1")
db = client.Health
collection = db.Healthclass # 表名classification import redis # 导入redis数据库 r = redis.Redis(host='127.0.0.1', port=6379, db=0) ii = 0
class healthcareClassSpider(scrapy.Spider):
name = "HealthCare"
allowed_domains = ["fuke120.com"] # 允许访问的域
start_urls = [
"http://fuke.fuke120.com/",
] # 每爬完一个网页会回调parse方法
def parse(self, response):
global ii
hxs = HtmlXPathSelector(response)
hx = hxs.select('//div[@id="allsort"]/div[@class="item"]/span/a')
hx1 = hxs.select('//div[@id="allsort"]/div[@class="item born"]/span/a')
# hx2 = hxs.select('//div[@id="allsort"]/div[@class="item"]/div[@class="i-mc"]/div[@class="i-mc01"]/ul[@class="w_ul01"]/li/a')
for secItem in hx:
ii+=1
url = secItem.select("@href").extract()
c = "http://fuke.fuke120.com"+url[0]
name = secItem.select("text()").extract() print(c)
print(name)
classid = collection.insert({'healthclass': name, 'pid': None})
healthurl = '%s,%s,%s' % (classid, c, ii)
r.lpush('healthclassurl',healthurl)
for secItem1 in hx1:
url = secItem1.select("@href").extract()
c1 = "http://fuke.fuke120.com"+url[0]
name1 = secItem1.select("text()").extract()
print(c1)
print(name1)
classid = collection.insert({'healthclass': name1, 'pid': None})
healthurl = '%s,%s,%s' % (classid, c1, 0)
r.lpush('healthclassurl', healthurl)

  2.py

# -*- coding: utf-8 -*-
import re
from urllib.request import urlopen
from urllib.request import Request
from bs4 import BeautifulSoup
from lxml import etree
import pymongo
import scrapy
from scrapy.selector import HtmlXPathSelector
from bson.objectid import ObjectId
# from scrapy.http import Request
# from urllib.request import urlopen
from scrapy.http import Request
# from hello.items import ZhaopinItem
# from scrapy.spiders import CrawlSpider, Rule
# from scrapy.linkextractors import LinkExtractor
from urllib.request import Request,ProxyHandler
from urllib.request import build_opener
client = pymongo.MongoClient(host="127.0.0.1")
db = client.Health #库名dianping
collection = db.Diseaseclass #表名classification import redis #导入redis数据库 r = redis.Redis(host='192.168.60.112', port=6379, db=0, charset='utf-8')
class healthcareClassSpider(scrapy.Spider): name = "HealthCare1"
allowed_domains = ["fuke120.com"] # 允许访问的域
dict = {}
start_urls = [] def __init__(self):
a = r.lrange('healthclassurl', 0,-1) for item in a:
healthurl = bytes.decode(item)
arr = healthurl.split(',')
healthcareClassSpider.start_urls.append(arr[1]) num = arr[2]
pid = arr[0]
url = arr[1]
self.dict[url] = {"pid": pid, "num": num}
def parse(self, response):
nameInfo = self.dict[response.url]
pid1 = nameInfo['pid']
pid = ObjectId(pid1)
num = nameInfo['num']
hxs = HtmlXPathSelector(response)
hx = hxs.select('//div[@class="x_con02_2"]/div[@class="x_con02_3"]/ul/li/p/a')
for secItem in hx:
url = secItem.select("@href").extract()
url = "http://fuke.fuke120.com"+url[0]
name = secItem.select("text()").extract()
print(url)
print(name)
classid = collection.insert({'Diseaseclass': name, 'pid': pid})
diseaseclassurl = '%s,%s,%s' % (classid, url, pid)
r.lpush('diseaseclassurl', diseaseclassurl)

  3.py

# -*- coding: utf-8 -*-
import re
from urllib.request import urlopen
from urllib.request import Request
from bs4 import BeautifulSoup
from lxml import etree
import pymongo
import scrapy
from scrapy_splash import SplashMiddleware
from scrapy.http import Request, HtmlResponse
from scrapy_splash import SplashRequest
from scrapy.selector import Selector
from scrapy.selector import HtmlXPathSelector
from bson.objectid import ObjectId
# from diseaseHealth.diseaseHealth.spiders.SpiderJsDynamic import phantomjs1
# from scrapy.http import Request
# from urllib.request import urlopen
from scrapy.http import Request client = pymongo.MongoClient(host="127.0.0.1")
db = client.Health # 库名dianping
collection = db.Treatclass # 表名classification
#
import redis # 导入redis数据库
#
r = redis.Redis(host='192.168.60.112', port=6379, db=0, charset='utf-8') class healthcareClassSpider(scrapy.Spider): name = "HealthCare2"
allowed_domains = ["fuke120.com"] # 允许访问的域
dict = {}
start_urls = [] def __init__(self):
a = r.lrange('diseaseclassurl', 0,-1) for item in a:
healthurl = bytes.decode(item)
arr = healthurl.split(',')
healthcareClassSpider.start_urls.append(arr[1]) num = arr[2]
pid = arr[0]
url = arr[1]
self.dict[url] = {"pid": pid, "num": num} def start_requests(self): for url in self.start_urls:
yield SplashRequest(url, self.parse, args={'wait': 0.5})
def parse(self, response):
# a = response.body.decode('utf-8')
# print(a) nameInfo = self.dict[response.url]
pid1 = nameInfo['pid']
pid = ObjectId(pid1)
num = nameInfo['num']
print(num)
print(pid)
hxs = HtmlXPathSelector(response)
hx = hxs.select('//div[@class="dh01"]/ul[@class="ul_bg01"]/li/a')
for secItem in hx:
url = secItem.select("@href").extract()
c = "http://fuke.fuke120.com" + url[0]
name = secItem.select("text()").extract()
print(c)
print(name)
classid = collection.insert({'Treatclass': name, 'pid': pid})
treatclassurl = '%s,%s,%s' % (classid, c, pid)
r.lpush('treatclassurl', treatclassurl)

  大功告成,主要还是为了使用scrapy-splash。

 

配置scrapy-splash+python爬取医院信息(利用了scrapy-splash)的更多相关文章

  1. Python爬取招聘信息,并且存储到MySQL数据库中

    前面一篇文章主要讲述,如何通过Python爬取招聘信息,且爬取的日期为前一天的,同时将爬取的内容保存到数据库中:这篇文章主要讲述如何将python文件压缩成exe可执行文件,供后面的操作. 这系列文章 ...

  2. Python爬取网页信息

    Python爬取网页信息的步骤 以爬取英文名字网站(https://nameberry.com/)中每个名字的评论内容,包括英文名,用户名,评论的时间和评论的内容为例. 1.确认网址 在浏览器中输入初 ...

  3. python爬取酒店信息练习

    爬取酒店信息,首先知道要用到那些库.本次使用request库区获取网页,使用bs4来解析网页,使用selenium来进行模拟浏览. 本次要爬取的美团网的蚌埠酒店信息及其评价.爬取的网址为“http:/ ...

  4. Scrapy实战篇(六)之Scrapy配合Selenium爬取京东信息(上)

    在之前的一篇实战之中,我们已经爬取过京东商城的文胸数据,但是前面的那一篇其实是有一个缺陷的,不知道你看出来没有,下面就来详细的说明和解决这个缺陷. 我们在京东搜索页面输入关键字进行搜索的时候,页面的返 ...

  5. (转)python爬取拉勾网信息

    学习Python也有一段时间了,各种理论知识大体上也算略知一二了,今天就进入实战演练:通过Python来编写一个拉勾网薪资调查的小爬虫. 第一步:分析网站的请求过程 我们在查看拉勾网上的招聘信息的时候 ...

  6. python爬取商品信息

    老严要爬某网购网站的商品信息,正好我最近在学python,就一起写了一个简单的爬虫程序. 需求:某网的商品信息,包括商品名,市场价和售价 工具:python2.7.8,urllib2,re #codi ...

  7. python爬取微信信息--显示性别/地域/词云(附代码)

    看到一篇有意思的博客 利用微信开放的接口itchat 可以获取登录的微信好友信息 并且利用图像工具显示分析结果 非常的有意思 记录下实现过程 并提供可执行代码 首先要 import itchat 库 ...

  8. 爬虫 (6)- Scrapy 实战案例 - 爬取不锈钢的相关钢卷信息

    超详细创建流程及思路 一. 新建项目 1.创建文件夹,然后在对应文件夹创建一个新的python项目 2.点击Terminal命令行窗口,运行下面的命令创建scrapy项目 scrapy startpr ...

  9. [python] 常用正则表达式爬取网页信息及分析HTML标签总结【转】

    [python] 常用正则表达式爬取网页信息及分析HTML标签总结 转http://blog.csdn.net/Eastmount/article/details/51082253 标签: pytho ...

随机推荐

  1. maven 集成tomcat6,tomcat7

    1. maven 集成 tomcat6的配置 maven自带的是tomcat6插件,所以不配置的话也可以,默认tomcat6,8080端口,需要更改端口或者编码方式等,也可以自己再配置一次: < ...

  2. hadoop集群服务器配置注意事项

    1.使用root账户,一劳记逸,远离权限问题. 2.关闭防火墙,命令:service iptables stop 想永久关闭,命令为:chkconfig iptables off 查看防火墙状态,命令 ...

  3. RabbitMQ 默认端口号

    4369 (epmd), 25672 (Erlang distribution) 5672, 5671 (AMQP 0-9-1 without and with TLS) 15672 (if mana ...

  4. rewrite写法

    RewriteRule ^/android-special-(\d+).html$ /special/index.php?c=index&a=specialDetail&speid=$ ...

  5. CUDA C Best Practices Guide 在线教程学习笔记 Part 1

    0. APOD过程 ● 评估.分析代码运行时间的组成,对瓶颈进行并行化设计.了解需求和约束条件,确定应用程序的加速性能改善的上限. ● 并行化.根据原来的代码,采用一些手段进行并行化,例如使用现有库, ...

  6. Grunt打包之seajs项目【转】

    原文:http://www.cnblogs.com/accordion/p/4508154.html grunt与seajs grunt是前端流行的自定义任务的脚手架工具,我们可以使用grunt来为我 ...

  7. linux操作系统基础篇(八)

    shell脚本的变量以及正则表达式 一.变量 含义:程序的运行就是一些列状态的变量->用变量值的变化去表示. 命名规则 以字母或下划线开头,剩下的部分可以是:字母.数字.下划线. 最好遵循下述规 ...

  8. tornado之子模板

    #!/usr/bin/env python26 #-*- coding:utf8 -*- import tornado.httpserver import tornado.ioloop import ...

  9. Fedora 23建立wifi热点(Android手机可用)

    在ubuntu14.04下使用ap-hotspot,速度还不错.但是在15.04下就用不了了,不知为啥.现在使用fedora23,在学校还是挺需要给手机连wifi的,于是google看看ap-hots ...

  10. 负载均衡手段之DNS轮询

    大多数域名注册商都支持对统一主机添加多条A记录,这就是DNS轮询,DNS服务器将解析请求按照A记录的顺序,随机分配到不同的IP上,这样就完成了简单的负载均衡.下图的例子是:有3台联通服务器.3台电信服 ...