北京艾丽斯妇科医院(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. USACO奶牛赛跑(逆序对)

    Description 约翰有 N 头奶牛,他为这些奶牛准备了一个周长为 C 的环形跑牛场.所有奶牛从起点同时起跑,奶牛在比赛中总是以匀速前进的,第 i 头牛的速度为 Vi.只要有一头奶牛跑完 L 圈 ...

  3. Fibonacci again and again(SG函数应用)

    Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...

  4. css元素选择器 first-child nth-child

    E:first-child   只要E元素是它的父级的第一个子元素,就选中.它需要同时满足两个条件,    (1)是"第一个子元素",    (2)是"这个子元素刚好是E ...

  5. linux-touch

    linux-touch 用于创建文件或者更新文件的修改日期 命令参数 - d yyyymmdd:把文件的存取或修改时间改为  yyyy年mm月dd日 - a :只把文件的存取时间改成当前时间 - m: ...

  6. vue 集成 axios 发送post请求 payload导致后台无法接收到数据问题

    vue 集成axios之后,发送的post请求默认为payload 方式. 如果想改为正常的方式,需要增加headers头,并且将发送是数据json格式改为 querystring的方式. 安装依赖 ...

  7. Python3学习笔记 - 准备环境

    前言 最近乘着项目不忙想赶一波时髦学习一下Python3.由于正好学习了Docker,并深深迷上了Docker,所以必须趁热打铁的用它来创建我们的Python3的开发测试环境.Python3的中文教程 ...

  8. ab使用命令

    ab使用-A auth-username:password    向服务器提供基本认证信息.用户名和密码之间":"分割,以base64编码形式发送.无论服务器是否需要(即是否发送了 ...

  9. 万年历java

    public void showTime(){/*万年历 :  1900年1月20号是星期几?1月1号是星期一1月8号是星期一1月15号是星期一1%7 = 18%7 = 115%7 = 1★: 1. ...

  10. cocoaPods打包的静态库

    cocoaPods管理自己的静态库供其它人下载使用(直接使用上一篇用cocoaPod打包的静态库)(1) 创建github仓库 (2) 下载仓库到本地 (3) 将打包好的framework放到项目中 ...