Commit 06356c0d authored by yuhao's avatar yuhao

first commit

parents
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*~
# C extensions
*.so
# Distribution / packaging
.Python
env/
bin/
build/
develop-eggs/
dist/
eggs/
lib/
lib64/
parts/
sdist/
var/
.idea/
*.egg-info/
.installed.cfg
*.egg
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.cache
nosetests.xml
coverage.xml
# Translations
*.mo
# Mr Developer
.mr.developer.cfg
.project
.pydevproject
# Rope
.ropeproject
# Django stuff:
*.log
*.pot
# Sphinx documentation
docs/_build/
# config
fabfile.py
settings.online.py
/gaia/settings.py
media/
log/
crawldata/
conf/
/static
.vagrant/
Vagrantfile
*.DS_Store
dump.rdb
# .gitignore for yangchuncheng
settings_override*
.script/
.tmp.sql
.env
*.pem
coverage_html/
# -*- coding: utf-8 -*-
# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html
import datetime
import re
import redis
import scrapy
from scrapy.loader import ItemLoader
from scrapy.loader.processors import MapCompose, TakeFirst, Join
from utils.common import extract_num
from settings import SQL_DATETIME_FORMAT, SQL_DATE_FORMAT
from w3lib.html import remove_tags
from models.es_types import ArticleType
from elasticsearch_dsl.connections import connections
es = connections.create_connection(ArticleType._doc_type.using)
redis_cli = redis.StrictRedis()
class ArticlespiderItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
pass
def add_jobbole(value):
return value+"-bobby"
def date_convert(value):
try:
create_date = datetime.datetime.strptime(value, "%Y/%m/%d").date()
except Exception as e:
create_date = datetime.datetime.now().date()
return create_date
def get_nums(value):
match_re = re.match(".*?(\d+).*", value)
if match_re:
nums = int(match_re.group(1))
else:
nums = 0
return nums
def remove_comment_tags(value):
#去掉tag中提取的评论
if "评论" in value:
return ""
else:
return value
def return_value(value):
return value
def gen_suggests(index, info_tuple):
#根据字符串生成搜索建议数组
used_words = set()
suggests = []
for text, weight in info_tuple:
if text:
#调用es的analyze接口分析字符串
words = es.indices.analyze(index=index, analyzer="ik_max_word", params={'filter':["lowercase"]}, body=text)
anylyzed_words = set([r["token"] for r in words["tokens"] if len(r["token"])>1])
new_words = anylyzed_words - used_words
else:
new_words = set()
if new_words:
suggests.append({"input":list(new_words), "weight":weight})
return suggests
class ArticleItemLoader(ItemLoader):
#自定义itemloader
default_output_processor = TakeFirst()
class JobBoleArticleItem(scrapy.Item):
# 定义文章实体
title = scrapy.Field()
url = scrapy.Field()
content = scrapy.Field()
def get_insert_sql(self):
insert_sql = """
insert into jobbole_article(title, url, create_date, fav_nums)
VALUES (%s, %s, %s, %s) ON DUPLICATE KEY UPDATE content=VALUES(fav_nums)
"""
params = (self["title"], self["url"], self["create_date"], self["fav_nums"])
return insert_sql, params
def save_to_es(self):
article = ArticleType()
article.title = self['title']
article.create_date = self["create_date"]
article.content = remove_tags(self["content"])
article.front_image_url = self["front_image_url"]
if "front_image_path" in self:
article.front_image_path = self["front_image_path"]
article.praise_nums = self["praise_nums"]
article.fav_nums = self["fav_nums"]
article.comment_nums = self["comment_nums"]
article.url = self["url"]
article.tags = self["tags"]
article.meta.id = self["url_object_id"]
article.suggest = gen_suggests(ArticleType._doc_type.index, ((article.title,10),(article.tags, 7)))
article.save()
redis_cli.incr("jobbole_count")
return
class ZhihuQuestionItem(scrapy.Item):
#知乎的问题 item
zhihu_id = scrapy.Field()
topics = scrapy.Field()
url = scrapy.Field()
title = scrapy.Field()
content = scrapy.Field()
answer_num = scrapy.Field()
comments_num = scrapy.Field()
watch_user_num = scrapy.Field()
click_num = scrapy.Field()
crawl_time = scrapy.Field()
def get_insert_sql(self):
#插入知乎question表的sql语句
insert_sql = """
insert into zhihu_question(zhihu_id, topics, url, title, content, answer_num, comments_num,
watch_user_num, click_num, crawl_time
)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
ON DUPLICATE KEY UPDATE content=VALUES(content), answer_num=VALUES(answer_num), comments_num=VALUES(comments_num),
watch_user_num=VALUES(watch_user_num), click_num=VALUES(click_num)
"""
zhihu_id = self["zhihu_id"][0]
topics = ",".join(self["topics"])
url = self["url"][0]
title = "".join(self["title"])
content = "".join(self["content"])
answer_num = extract_num("".join(self["answer_num"]))
comments_num = extract_num("".join(self["comments_num"]))
if len(self["watch_user_num"]) == 2:
watch_user_num = int(self["watch_user_num"][0])
click_num = int(self["watch_user_num"][1])
else:
watch_user_num = int(self["watch_user_num"][0])
click_num = 0
crawl_time = datetime.datetime.now().strftime(SQL_DATETIME_FORMAT)
params = (zhihu_id, topics, url, title, content, answer_num, comments_num,
watch_user_num, click_num, crawl_time)
return insert_sql, params
class ZhihuAnswerItem(scrapy.Item):
#知乎的问题回答item
zhihu_id = scrapy.Field()
url = scrapy.Field()
question_id = scrapy.Field()
author_id = scrapy.Field()
content = scrapy.Field()
parise_num = scrapy.Field()
comments_num = scrapy.Field()
create_time = scrapy.Field()
update_time = scrapy.Field()
crawl_time = scrapy.Field()
def get_insert_sql(self):
#插入知乎question表的sql语句
insert_sql = """
insert into zhihu_answer(zhihu_id, url, question_id, author_id, content, parise_num, comments_num,
create_time, update_time, crawl_time
) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
ON DUPLICATE KEY UPDATE content=VALUES(content), comments_num=VALUES(comments_num), parise_num=VALUES(parise_num),
update_time=VALUES(update_time)
"""
create_time = datetime.datetime.fromtimestamp(self["create_time"]).strftime(SQL_DATETIME_FORMAT)
update_time = datetime.datetime.fromtimestamp(self["update_time"]).strftime(SQL_DATETIME_FORMAT)
params = (
self["zhihu_id"], self["url"], self["question_id"],
self["author_id"], self["content"], self["parise_num"],
self["comments_num"], create_time, update_time,
self["crawl_time"].strftime(SQL_DATETIME_FORMAT),
)
return insert_sql, params
def remove_splash(value):
#去掉工作城市的斜线
return value.replace("/","")
def handle_jobaddr(value):
addr_list = value.split("\n")
addr_list = [item.strip() for item in addr_list if item.strip()!="查看地图"]
return "".join(addr_list)
class LagouJobItemLoader(ItemLoader):
#自定义itemloader
default_output_processor = TakeFirst()
class LagouJobItem(scrapy.Item):
#拉勾网职位信息
title = scrapy.Field()
url = scrapy.Field()
url_object_id = scrapy.Field()
salary = scrapy.Field()
job_city = scrapy.Field(
input_processor=MapCompose(remove_splash),
)
work_years = scrapy.Field(
input_processor = MapCompose(remove_splash),
)
degree_need = scrapy.Field(
input_processor = MapCompose(remove_splash),
)
job_type = scrapy.Field()
publish_time = scrapy.Field()
job_advantage = scrapy.Field()
job_desc = scrapy.Field()
job_addr = scrapy.Field(
input_processor=MapCompose(remove_tags, handle_jobaddr),
)
company_name = scrapy.Field()
company_url = scrapy.Field()
tags = scrapy.Field(
input_processor = Join(",")
)
crawl_time = scrapy.Field()
def get_insert_sql(self):
insert_sql = """
insert into lagou_job(title, url, url_object_id, salary, job_city, work_years, degree_need,
job_type, publish_time, job_advantage, job_desc, job_addr, company_name, company_url,
tags, crawl_time) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
ON DUPLICATE KEY UPDATE salary=VALUES(salary), job_desc=VALUES(job_desc)
"""
params = (
self["title"], self["url"], self["url_object_id"], self["salary"], self["job_city"],
self["work_years"], self["degree_need"], self["job_type"],
self["publish_time"], self["job_advantage"], self["job_desc"],
self["job_addr"], self["company_name"], self["company_url"],
self["job_addr"], self["crawl_time"].strftime(SQL_DATETIME_FORMAT),
)
return insert_sql, params
\ No newline at end of file
# -*- coding: utf-8 -*-
# Define here the models for your spider middleware
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/spider-middleware.html
from scrapy import signals
from fake_useragent import UserAgent
from tools.crawl_xici_ip import GetIP
class ArticlespiderSpiderMiddleware(object):
# Not all methods need to be defined. If a method is not defined,
# scrapy acts as if the spider middleware does not modify the
# passed objects.
@classmethod
def from_crawler(cls, crawler):
# This method is used by Scrapy to create your spiders.
s = cls()
crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
return s
def process_spider_input(response, spider):
# Called for each response that goes through the spider
# middleware and into the spider.
# Should return None or raise an exception.
return None
def process_spider_output(response, result, spider):
# Called with the results returned from the Spider, after
# it has processed the response.
# Must return an iterable of Request, dict or Item objects.
for i in result:
yield i
def process_spider_exception(response, exception, spider):
# Called when a spider or process_spider_input() method
# (from other spider middleware) raises an exception.
# Should return either None or an iterable of Response, dict
# or Item objects.
pass
def process_start_requests(start_requests, spider):
# Called with the start requests of the spider, and works
# similarly to the process_spider_output() method, except
# that it doesn’t have a response associated.
# Must return only requests (not items).
for r in start_requests:
yield r
def spider_opened(self, spider):
spider.logger.info('Spider opened: %s' % spider.name)
class RandomUserAgentMiddlware(object):
#随机更换user-agent
def __init__(self, crawler):
super(RandomUserAgentMiddlware, self).__init__()
self.ua = UserAgent()
self.ua_type = crawler.settings.get("RANDOM_UA_TYPE", "random")
@classmethod
def from_crawler(cls, crawler):
return cls(crawler)
def process_request(self, request, spider):
def get_ua():
return getattr(self.ua, self.ua_type)
request.headers.setdefault('User-Agent', get_ua())
class RandomProxyMiddleware(object):
#动态设置ip代理
def process_request(self, request, spider):
get_ip = GetIP()
request.meta["proxy"] = get_ip.get_random_ip()
from selenium import webdriver
from scrapy.http import HtmlResponse
class JSPageMiddleware(object):
#通过chrome请求动态网页
def process_request(self, request, spider):
if spider.name == "jobbole":
# browser = webdriver.Chrome(executable_path="D:/Temp/chromedriver.exe")
spider.browser.get(request.url)
import time
time.sleep(3)
print ("访问:{0}".format(request.url))
return HtmlResponse(url=spider.browser.current_url, body=spider.browser.page_source, encoding="utf-8", request=request)
# from pyvirtualdisplay import Display
# display = Display(visible=0, size=(800, 600))
# display.start()
#
# browser = webdriver.Chrome()
# browser.get()
# -*- coding: utf-8 -*-
__author__ = 'bobby'
# -*- coding: utf-8 -*-
__author__ = 'bobby'
from datetime import datetime
from elasticsearch_dsl import DocType, Date, Nested, Boolean, \
analyzer, InnerObjectWrapper, Completion, Keyword, Text, Integer
from elasticsearch_dsl.analysis import CustomAnalyzer as _CustomAnalyzer
from elasticsearch_dsl.connections import connections
connections.create_connection(hosts=["localhost"])
class CustomAnalyzer(_CustomAnalyzer):
def get_analysis_definition(self):
return {}
ik_analyzer = CustomAnalyzer("ik_max_word", filter=["lowercase"])
class ArticleType(DocType):
#伯乐在线文章类型
suggest = Completion(analyzer=ik_analyzer)
title = Text(analyzer="ik_max_word")
create_date = Date()
url = Keyword()
url_object_id = Keyword()
front_image_url = Keyword()
front_image_path = Keyword()
praise_nums = Integer()
comment_nums = Integer()
fav_nums = Integer()
tags = Text(analyzer="ik_max_word")
content = Text(analyzer="ik_max_word")
class Meta:
index = "jobbole"
doc_type = "article"
if __name__ == "__main__":
ArticleType.init()
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
import codecs
import json
from scrapy.pipelines.images import ImagesPipeline
from scrapy.exporters import JsonItemExporter
from twisted.enterprise import adbapi
from models.es_types import ArticleType
from w3lib.html import remove_tags
import MySQLdb
import MySQLdb.cursors
class ArticlespiderPipeline(object):
def process_item(self, item, spider):
return item
class JsonWithEncodingPipeline(object):
# 自定义json文件的导出
def __init__(self):
self.file = codecs.open('article.json', 'w', encoding="utf-8") # 用codecs避免文件编码
def process_item(self, item, spider):
# 将item转换成字符串, ensure_ascii=False以便中文显示正常
lines = json.dumps(dict(item), ensure_ascii=False) + "\n"
# 将字符串写入文件中
self.file.write(lines)
return item
def spider_closed(self, spider):
self.file.close()
class MysqlPipeline(object):
# 采用同步的机制写入mysql
def __init__(self):
self.conn = MySQLdb.connect('127.0.0.1', 'root', '', 'article_spider', charset="utf8", use_unicode=True)
self.cursor = self.conn.cursor()
def process_item(self, item, spider):
insert_sql = """
insert into jobbole_article(title, url, content)
VALUES (%s, %s, %s)
"""
self.cursor.execute(insert_sql, (item["title"], item["url"], item["content"]))
self.conn.commit()
class MysqlTwistedPipline(object):
def __init__(self, dbpool):
self.dbpool = dbpool
@classmethod
def from_settings(cls, settings):
dbparms = dict(
host = settings["MYSQL_HOST"],
db = settings["MYSQL_DBNAME"],
user = settings["MYSQL_USER"],
passwd = settings["MYSQL_PASSWORD"],
charset='utf8',
cursorclass=MySQLdb.cursors.DictCursor,
use_unicode=True,
)
dbpool = adbapi.ConnectionPool("MySQLdb", **dbparms)
return cls(dbpool)
def process_item(self, item, spider):
#使用twisted将mysql插入变成异步执行
query = self.dbpool.runInteraction(self.do_insert, item)
query.addErrback(self.handle_error, item, spider) #处理异常
def handle_error(self, failure, item, spider):
#处理异步插入的异常
print (failure)
def do_insert(self, cursor, item):
#执行具体的插入
#根据不同的item 构建不同的sql语句并插入到mysql中
insert_sql, params = item.get_insert_sql()
cursor.execute(insert_sql, params)
class JsonExporterPipleline(object):
#调用scrapy提供的json export导出json文件
def __init__(self):
self.file = open('articleexport.json', 'wb')
self.exporter = JsonItemExporter(self.file, encoding="utf-8", ensure_ascii=False)
self.exporter.start_exporting()
def close_spider(self, spider):
self.exporter.finish_exporting()
self.file.close()
def process_item(self, item, spider):
self.exporter.export_item(item)
return item
class ArticleImagePipeline(ImagesPipeline):
def item_completed(self, results, item, info):
if "front_image_url" in item:
for ok, value in results:
image_file_path = value["path"]
item["front_image_path"] = image_file_path
return item
class ElasticsearchPipeline(object):
#将数据写入到es中
def process_item(self, item, spider):
#将item转换为es的数据
item.save_to_es()
return item
\ No newline at end of file
# -*- coding: utf-8 -*-
import os
# Scrapy settings for ArticleSpider project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
# http://doc.scrapy.org/en/latest/topics/settings.html
# http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html
# http://scrapy.readthedocs.org/en/latest/topics/spider-middleware.html
BOT_NAME = 'ArticleSpider'
SPIDER_MODULES = ['ArticleSpider.spiders']
NEWSPIDER_MODULE = 'ArticleSpider.spiders'
# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'ArticleSpider (+http://www.yourdomain.com)'
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
# Configure maximum concurrent requests performed by Scrapy (default: 16)
#CONCURRENT_REQUESTS = 32
# Configure a delay for requests for the same website (default: 0)
# See http://scrapy.readthedocs.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
DOWNLOAD_DELAY = 10
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16
# Disable cookies (enabled by default)
COOKIES_ENABLED = False
# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False
# Override the default request headers:
#DEFAULT_REQUEST_HEADERS = {
# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
# 'Accept-Language': 'en',
#}
# Enable or disable spider middlewares
# See http://scrapy.readthedocs.org/en/latest/topics/spider-middleware.html
# SPIDER_MIDDLEWARES = {
# 'ArticleSpider.middlewares.ArticlespiderSpiderMiddleware': 543,
# }
# Enable or disable downloader middlewares
# See http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html
# DOWNLOADER_MIDDLEWARES = {
# 'ArticleSpider.middlewares.JSPageMiddleware': 1,
# # 'ArticleSpider.middlewares.RandomUserAgentMiddlware': 543,
# # 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
# }
# Enable or disable extensions
# See http://scrapy.readthedocs.org/en/latest/topics/extensions.html
#EXTENSIONS = {
# 'scrapy.extensions.telnet.TelnetConsole': None,
#}
# Configure item pipelines
# See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
'ArticleSpider.pipelines.JsonWithEncodingPipeline': 2,
# # 'scrapy.pipelines.images.ImagesPipeline': 1,
# 'ArticleSpider.pipelines.ArticleImagePipeline': 1,
# 'ArticleSpider.pipelines.MysqlTwistedPipline': 1,
# 'ArticleSpider.pipelines.MysqlPipeline': 1,
# 'ArticleSpider.pipelines.ElasticsearchPipeline': 1
}
IMAGES_URLS_FIELD = "front_image_url"
project_dir = os.path.abspath(os.path.dirname(__file__))
IMAGES_STORE = os.path.join(project_dir, 'images')
import sys
BASE_DIR = os.path.dirname(os.path.abspath(os.path.dirname(__file__)))
sys.path.insert(0, os.path.join(BASE_DIR, 'ArticleSpider'))
USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0"
RANDOM_UA_TYPE = "random"
#
# IMAGES_MIN_HEIGHT = 100
# IMAGES_MIN_WIDTH = 100
# Enable and configure the AutoThrottle extension (disabled by default)
# See http://doc.scrapy.org/en/latest/topics/autothrottle.html
AUTOTHROTTLE_ENABLED = True
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False
# Enable and configure HTTP caching (disabled by default)
# See http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
MYSQL_HOST = "127.0.0.1"
MYSQL_DBNAME = "article_spider"
MYSQL_USER = "root"
MYSQL_PASSWORD = "root"
SQL_DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"
SQL_DATE_FORMAT = "%Y-%m-%d"
# This package will contain the spiders of your Scrapy project
#
# Please refer to the documentation for information on how to create and manage
# your spiders.
# -*- coding: utf-8 -*-
import re
import scrapy
import datetime
from scrapy.http import Request
from urllib import parse
from scrapy.loader import ItemLoader
from ArticleSpider.items import JobBoleArticleItem, ArticleItemLoader
from selenium import webdriver
from scrapy.xlib.pydispatch import dispatcher
from scrapy import signals
class JobboleSpider(scrapy.Spider):
name = "jobbole"
allowed_domains = ["blog.jobbole.com"]
start_urls = ['http://blog.jobbole.com/all-posts/']
# def __init__(self):
# self.browser = webdriver.Chrome(executable_path="D:/Temp/chromedriver.exe")
# super(JobboleSpider, self).__init__()
# dispatcher.connect(self.spider_closed, signals.spider_closed)
#
# def spider_closed(self, spider):
# #当爬虫退出的时候关闭chrome
# print ("spider closed")
# self.browser.quit()
#收集伯乐在线所有404的url以及404页面数
handle_httpstatus_list = [404]
def __init__(self, **kwargs):
self.fail_urls = []
dispatcher.connect(self.handle_spider_closed, signals.spider_closed)
def handle_spider_closed(self, spider, reason):
self.crawler.stats.set_value("failed_urls", ",".join(self.fail_urls))
def parse(self, response):
"""
1. 获取文章列表页中的文章url并交给scrapy下载后并进行解析
2. 获取下一页的url并交给scrapy进行下载, 下载完成后交给parse
"""
#解析列表页中的所有文章url并交给scrapy下载后并进行解析
if response.status == 404:
self.fail_urls.append(response.url)
self.crawler.stats.inc_value("failed_url")
# 获取所有文章链接
post_nodes = response.css("#archive .floated-thumb .post-thumb a")
for post_node in post_nodes:
image_url = post_node.css("img::attr(src)").extract_first("") # 如果list为空,返回""
post_url = post_node.css("::attr(href)").extract_first("")
# yield语句直接将Request交给scrapy去下载, 实际上yield利用了twisted的异步机制
yield Request(url=parse.urljoin(response.url, post_url), meta={"front_image_url": image_url},
callback=self.parse_detail)
#提取下一页并交给scrapy进行下载
next_url = response.css(".next.page-numbers::attr(href)").extract_first("")
# 如果有下一页
if next_url:
yield Request(url=parse.urljoin(response.url, post_url), callback=self.parse)
def parse_detail(self, response):
"""
从每篇文章中提取结构化数据
:param response:
:return: article_item
"""
article_item = JobBoleArticleItem()
# 通过xpath提取文章的具体字段
title = response.xpath('//div[@class="entry-header"]/h1/text()').extract_first("")
content = response.xpath("//div[@class='entry']").extract()[0]
# 通过css选择器提取字段
front_image_url = response.meta.get("front_image_url", "") #文章封面图
# title = response.css(".entry-header h1::text").extract()[0]
#
# content = response.css("div.entry").extract()[0]
article_item["title"] = title
article_item["url"] = response.url
article_item["content"] = content
# 通过item loader加载item
# item_loader = ArticleItemLoader(item=JobBoleArticleItem(), response=response)
# item_loader.add_css("title", ".entry-header h1::text")
# item_loader.add_value("url", response.url)
# item_loader.add_css("content", "div.entry")
# article_item = item_loader.load_item()
yield article_item
# -*- coding: utf-8 -*-
from datetime import datetime
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from items import LagouJobItemLoader, LagouJobItem
from ArticleSpider.utils.common import get_md5
class LagouSpider(CrawlSpider):
name = 'lagou'
allowed_domains = ['www.lagou.com']
start_urls = ['https://www.lagou.com']
rules = (
Rule(LinkExtractor(allow=("zhaopin/.*",)), follow=True),
Rule(LinkExtractor(allow=("gongsi/j\d+.html",)), follow=True),
Rule(LinkExtractor(allow=r'jobs/\d+.html'), callback='parse_job', follow=True),
)
#
# def parse_start_url(self, response):
# return []
#
# def process_results(self, response, results):
# return results
def parse_job(self, response):
#解析拉勾网的职位
item_loader = LagouJobItemLoader(item=LagouJobItem(), response=response)
item_loader.add_css("title", ".job-name::attr(title)")
item_loader.add_value("url", response.url)
item_loader.add_value("url_object_id", get_md5(response.url))
item_loader.add_css("salary", ".job_request .salary::text")
item_loader.add_xpath("job_city", "//*[@class='job_request']/p/span[2]/text()")
item_loader.add_xpath("work_years", "//*[@class='job_request']/p/span[3]/text()")
item_loader.add_xpath("degree_need", "//*[@class='job_request']/p/span[4]/text()")
item_loader.add_xpath("job_type", "//*[@class='job_request']/p/span[5]/text()")
item_loader.add_css("tags", '.position-label li::text')
item_loader.add_css("publish_time", ".publish_time::text")
item_loader.add_css("job_advantage", ".job-advantage p::text")
item_loader.add_css("job_desc", ".job_bt div")
item_loader.add_css("job_addr", ".work_addr")
item_loader.add_css("company_name", "#job_company dt a img::attr(alt)")
item_loader.add_css("company_url", "#job_company dt a::attr(href)")
item_loader.add_value("crawl_time", datetime.now())
job_item = item_loader.load_item()
return job_item
# -*- coding: utf-8 -*-
import re
import json
import datetime
try:
import urlparse as parse
except:
from urllib import parse
import scrapy
from scrapy.loader import ItemLoader
from items import ZhihuQuestionItem, ZhihuAnswerItem
class ZhihuSpider(scrapy.Spider):
name = "zhihu"
allowed_domains = ["www.zhihu.com"]
start_urls = ['https://www.zhihu.com/']
#question的第一页answer的请求url
start_answer_url = "https://www.zhihu.com/api/v4/questions/{0}/answers?sort_by=default&include=data%5B%2A%5D.is_normal%2Cis_sticky%2Ccollapsed_by%2Csuggest_edit%2Ccomment_count%2Ccollapsed_counts%2Creviewing_comments_count%2Ccan_comment%2Ccontent%2Ceditable_content%2Cvoteup_count%2Creshipment_settings%2Ccomment_permission%2Cmark_infos%2Ccreated_time%2Cupdated_time%2Crelationship.is_author%2Cvoting%2Cis_thanked%2Cis_nothelp%2Cupvoted_followees%3Bdata%5B%2A%5D.author.is_blocking%2Cis_blocked%2Cis_followed%2Cvoteup_count%2Cmessage_thread_token%2Cbadge%5B%3F%28type%3Dbest_answerer%29%5D.topics&limit={1}&offset={2}"
headers = {
"HOST": "www.zhihu.com",
"Referer": "https://www.zhizhu.com",
'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0"
}
custom_settings = {
"COOKIES_ENABLED": True
}
def parse(self, response):
"""
提取出html页面中的所有url 并跟踪这些url进行一步爬取
如果提取的url中格式为 /question/xxx 就下载之后直接进入解析函数
"""
all_urls = response.css("a::attr(href)").extract()
all_urls = [parse.urljoin(response.url, url) for url in all_urls]
all_urls = filter(lambda x:True if x.startswith("https") else False, all_urls)
for url in all_urls:
match_obj = re.match("(.*zhihu.com/question/(\d+))(/|$).*", url)
if match_obj:
#如果提取到question相关的页面则下载后交由提取函数进行提取
request_url = match_obj.group(1)
yield scrapy.Request(request_url, headers=self.headers, callback=self.parse_question)
else:
#如果不是question页面则直接进一步跟踪
yield scrapy.Request(url, headers=self.headers, callback=self.parse)
def parse_question(self, response):
#处理question页面, 从页面中提取出具体的question item
if "QuestionHeader-title" in response.text:
#处理新版本
match_obj = re.match("(.*zhihu.com/question/(\d+))(/|$).*", response.url)
if match_obj:
question_id = int(match_obj.group(2))
item_loader = ItemLoader(item=ZhihuQuestionItem(), response=response)
item_loader.add_css("title", "h1.QuestionHeader-title::text")
item_loader.add_css("content", ".QuestionHeader-detail")
item_loader.add_value("url", response.url)
item_loader.add_value("zhihu_id", question_id)
item_loader.add_css("answer_num", ".List-headerText span::text")
item_loader.add_css("comments_num", ".QuestionHeader-actions button::text")
item_loader.add_css("watch_user_num", ".NumberBoard-value::text")
item_loader.add_css("topics", ".QuestionHeader-topics .Popover div::text")
question_item = item_loader.load_item()
else:
#处理老版本页面的item提取
match_obj = re.match("(.*zhihu.com/question/(\d+))(/|$).*", response.url)
if match_obj:
question_id = int(match_obj.group(2))
item_loader = ItemLoader(item=ZhihuQuestionItem(), response=response)
# item_loader.add_css("title", ".zh-question-title h2 a::text")
item_loader.add_xpath("title", "//*[@id='zh-question-title']/h2/a/text()|//*[@id='zh-question-title']/h2/span/text()")
item_loader.add_css("content", "#zh-question-detail")
item_loader.add_value("url", response.url)
item_loader.add_value("zhihu_id", question_id)
item_loader.add_css("answer_num", "#zh-question-answer-num::text")
item_loader.add_css("comments_num", "#zh-question-meta-wrap a[name='addcomment']::text")
# item_loader.add_css("watch_user_num", "#zh-question-side-header-wrap::text")
item_loader.add_xpath("watch_user_num", "//*[@id='zh-question-side-header-wrap']/text()|//*[@class='zh-question-followers-sidebar']/div/a/strong/text()")
item_loader.add_css("topics", ".zm-tag-editor-labels a::text")
question_item = item_loader.load_item()
yield scrapy.Request(self.start_answer_url.format(question_id, 20, 0), headers=self.headers, callback=self.parse_answer)
yield question_item
def parse_answer(self, reponse):
#处理question的answer
ans_json = json.loads(reponse.text)
is_end = ans_json["paging"]["is_end"]
next_url = ans_json["paging"]["next"]
#提取answer的具体字段
for answer in ans_json["data"]:
answer_item = ZhihuAnswerItem()
answer_item["zhihu_id"] = answer["id"]
answer_item["url"] = answer["url"]
answer_item["question_id"] = answer["question"]["id"]
answer_item["author_id"] = answer["author"]["id"] if "id" in answer["author"] else None
answer_item["content"] = answer["content"] if "content" in answer else None
answer_item["parise_num"] = answer["voteup_count"]
answer_item["comments_num"] = answer["comment_count"]
answer_item["create_time"] = answer["created_time"]
answer_item["update_time"] = answer["updated_time"]
answer_item["crawl_time"] = datetime.datetime.now()
yield answer_item
if not is_end:
yield scrapy.Request(next_url, headers=self.headers, callback=self.parse_answer)
def start_requests(self):
return [scrapy.Request('https://www.zhihu.com/#signin', headers=self.headers, callback=self.login)]
def login(self, response):
response_text = response.text
match_obj = re.match('.*name="_xsrf" value="(.*?)"', response_text, re.DOTALL)
xsrf = ''
if match_obj:
xsrf = (match_obj.group(1))
if xsrf:
post_url = "https://www.zhihu.com/login/phone_num"
post_data = {
"_xsrf": xsrf,
"phone_num": "",
"password": "",
"captcha": ""
}
import time
t = str(int(time.time() * 1000))
captcha_url = "https://www.zhihu.com/captcha.gif?r={0}&type=login".format(t)
yield scrapy.Request(captcha_url, headers=self.headers, meta={"post_data":post_data}, callback=self.login_after_captcha)
def login_after_captcha(self, response):
with open("captcha.jpg", "wb") as f:
f.write(response.body)
f.close()
from PIL import Image
try:
im = Image.open('captcha.jpg')
im.show()
im.close()
except:
pass
captcha = input("输入验证码\n>")
post_data = response.meta.get("post_data", {})
post_url = "https://www.zhihu.com/login/phone_num"
post_data["captcha"] = captcha
return [scrapy.FormRequest(
url=post_url,
formdata=post_data,
headers=self.headers,
callback=self.check_login
)]
def check_login(self, response):
#验证服务器的返回数据判断是否成功
text_json = json.loads(response.text)
if "msg" in text_json and text_json["msg"] == "登录成功":
for url in self.start_urls:
yield scrapy.Request(url, dont_filter=True, headers=self.headers)
# -*- coding: utf-8 -*-
__author__ = 'bobby'
import mmh3
import BitVector
import redis
import math
import time
class BloomFilter():
#内置100个随机种子
SEEDS = [543, 460, 171, 876, 796, 607, 650, 81, 837, 545, 591, 946, 846, 521, 913, 636, 878, 735, 414, 372,
344, 324, 223, 180, 327, 891, 798, 933, 493, 293, 836, 10, 6, 544, 924, 849, 438, 41, 862, 648, 338,
465, 562, 693, 979, 52, 763, 103, 387, 374, 349, 94, 384, 680, 574, 480, 307, 580, 71, 535, 300, 53,
481, 519, 644, 219, 686, 236, 424, 326, 244, 212, 909, 202, 951, 56, 812, 901, 926, 250, 507, 739, 371,
63, 584, 154, 7, 284, 617, 332, 472, 140, 605, 262, 355, 526, 647, 923, 199, 518]
#capacity是预先估计要去重的数量
#error_rate表示错误率
#conn表示redis的连接客户端
#key表示在redis中的键的名字前缀
def __init__(self, capacity=1000000000, error_rate=0.00000001, conn=None, key='BloomFilter'):
self.m = math.ceil(capacity*math.log2(math.e)*math.log2(1/error_rate)) #需要的总bit位数
self.k = math.ceil(math.log1p(2)*self.m/capacity) #需要最少的hash次数
self.mem = math.ceil(self.m/8/1024/1024) #需要的多少M内存
self.blocknum = math.ceil(self.mem/512) #需要多少个512M的内存块,value的第一个字符必须是ascii码,所有最多有256个内存块
self.seeds = self.SEEDS[0:self.k]
self.key = key
self.N = 2**31-1
self.redis = conn
if not self.redis:
#默认如果没有redis连接,在内存中使用512M的内存块去重
self.bitset = BitVector.BitVector(size=1<<32)
print(self.mem)
print(self.k)
def add(self, value):
name = self.key + "_" + str(ord(value[0])%self.blocknum)
hashs = self.get_hashs(value)
for hash in hashs:
if self.redis:
self.redis.setbit(name, hash, 1)
else:
self.bitset[hash] = 1
def is_exist(self, value):
name = self.key + "_" + str(ord(value[0])%self.blocknum)
hashs = self.get_hashs(value)
exist = True
for hash in hashs:
if self.redis:
exist = exist & self.redis.getbit(name, hash)
else:
exist = exist & self.bitset[hash]
return exist
def get_hashs(self, value):
hashs = list()
for seed in self.seeds:
hash = mmh3.hash(value, seed)
if hash >= 0:
hashs.append(hash)
else:
hashs.append(self.N - hash)
return hashs
pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=0)
conn = redis.StrictRedis(connection_pool=pool)
start = time.time()
bf = BloomFilter(conn=conn)
bf.add('test')
bf.add('fsest1')
print(bf.is_exist('qest'))
print(bf.is_exist('testdsad'))
end = time.time()
print(end-start)
\ No newline at end of file
# -*- coding: utf-8 -*-
__author__ = 'bobby'
import hashlib
import re
def get_md5(url):
if isinstance(url, str):
url = url.encode("utf-8")
m = hashlib.md5()
m.update(url)
return m.hexdigest()
def extract_num(text):
#从字符串中提取出数字
match_re = re.match(".*?(\d+).*", text)
if match_re:
nums = int(match_re.group(1))
else:
nums = 0
return nums
if __name__ == "__main__":
print (get_md5("http://jobbole.com".encode("utf-8")))
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
# -*- coding: utf-8 -*-
__author__ = 'bobby'
import requests
try:
import cookielib
except:
import http.cookiejar as cookielib
import re
session = requests.session()
session.cookies = cookielib.LWPCookieJar(filename="cookies.txt")
try:
session.cookies.load(ignore_discard=True)
except:
print ("cookie未能加载")
agent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0"
header = {
"HOST":"www.zhihu.com",
"Referer": "https://www.zhizhu.com",
'User-Agent': agent
}
def is_login():
#通过个人中心页面返回状态码来判断是否为登录状态
inbox_url = "https://www.zhihu.com/question/56250357/answer/148534773"
response = session.get(inbox_url, headers=header, allow_redirects=False)
if response.status_code != 200:
return False
else:
return True
def get_xsrf():
#获取xsrf code
response = session.get("https://www.zhihu.com", headers=header)
match_obj = re.match('.*name="_xsrf" value="(.*?)"', response.text)
if match_obj:
return (match_obj.group(1))
else:
return ""
def get_index():
response = session.get("https://www.zhihu.com", headers=header)
with open("index_page.html", "wb") as f:
f.write(response.text.encode("utf-8"))
print ("ok")
def get_captcha():
import time
t = str(int(time.time()*1000))
captcha_url = "https://www.zhihu.com/captcha.gif?r={0}&type=login".format(t)
t = session.get(captcha_url, headers=header)
with open("captcha.jpg","wb") as f:
f.write(t.content)
f.close()
from PIL import Image
try:
im = Image.open('captcha.jpg')
im.show()
im.close()
except:
pass
captcha = input("输入验证码\n>")
return captcha
def zhihu_login(account, password):
#知乎登录
if re.match("^1\d{10}",account):
print ("手机号码登录")
post_url = "https://www.zhihu.com/login/phone_num"
post_data = {
"_xsrf": get_xsrf(),
"phone_num": account,
"password": password,
"captcha":get_captcha()
}
else:
if "@" in account:
#判断用户名是否为邮箱
print("邮箱方式登录")
post_url = "https://www.zhihu.com/login/email"
post_data = {
"_xsrf": get_xsrf(),
"email": account,
"password": password
}
response_text = session.post(post_url, data=post_data, headers=header)
session.cookies.save()
zhihu_login("18782902568", "admin123")
# get_index()
is_login()
# get_captcha()
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
captcha.jpg

3.86 KB

[0]
\ No newline at end of file
c5f10b9e69aaa06778aa80de1bf68429321ca05d
50e42ddfc10a8be617d63b6f63c40cdbfe6a7dc5
fae2eb2ab7b42bac9e4d47de4664bca44f3f32bf
8f2a6043389f138208bac1dc41872d148bbab11c
357bac8172d0cfb68875a72079dea25fb9e568b7
761792dd8c67068a5b4be988a7d321ece35079b8
fef5b8d0452b430fd65cb17f7485eb457ae6a1c8
5c10115f52eb5fe3feed50bd10caab6431010ca6
3007f19982e1043373b52e12bd4460fd3a0bb4bc
8b991d7a744ffe71cf36be9dcdddc924045c0050
b68cf66fe1be9ffea8b2bdb58c1849e69ff190b2
b90398725590c4f16d9c1f452cde80e1350a67dc
4284f06ddb55aeabf18d9523aee96c6def19a3d7
72fc30abc00ed6e100cb3f0944100ab1cabb5622
2399099505b9287b6779383894f3e5dd679dd058
968df50749c0730f5bc3dc70cdce550c33bca987
3f2478a03fee2ca5112029f3006feaece6882d0a
efdd072889e767b64c533c148416152efedc8af6
098cd59f1d26a65cd9af5ca73f34cc37a7755978
06c8a95bd10b214dd6266052b598268fb5e6a859
91bfa40b1a2b58cf4b2613dad5b7710f1d6f1ab5
bcb1eedd6c0a172bbcb0efb6189536aec0ddad99
9cfd60c3e241599223c382aee6b9b3b49dbd02e3
10b83834cc8dc3615a28b0c3a093bdea7378eac9
c42a4f5207642b32c0cade9e6f9702a478f61f5b
1e2cf7dcf0f6b63647a4fcc7cdefbe3f932718b6
3e571bd0c540cf7e4801c233c91cc1e5b9541250
e09fa1faf9603b29489950b2ac21e87a9cf0deca
f20b1634aa2465fc7cc5927d360a60e006dc40b4
2c26b820d6f8b8a36579af93d7c0d2f935969abc
0dc72f3d00b6d6e6a69557593877b77d14b286ad
dff6088603c4f701776a2d3304764951512dfb01
e07b5b158fcfa33f4621e44fbc314ea7af5a8467
1b6959323346c170cd1ac9f43d0bfc122b798051
03df0822800828da3379ab4ff4269219bec5ad35
36ce2330dcbdde23ec43ee5ae2172320c7128af4
789b5294792423cbc2cb35c5b85d804a3e43a866
899ab4ea706c61c7c68d369fe92aab3dd228f05d
8133be4d045f0308db891e42dc4b849ad8d33461
39e88484c4fac6aa01e9bc234cd3a73e27c8074a
7a3055cfa8ffb54acf9fa48253b075db833be628
dc9d4a3221626b71ff24afe86521ba23f059de64
78dbf542bfcde1cd23854b6aa9a79de3b91d97d4
9eca3c42ee6815ea03aeaf7f2e4ed29e5eb70be9
8674b03b10bee60b9d401616ef0e3ba769765290
2f84ea3e5293d386b5e8e9f4021200c5c5ce552d
ce0db9959eb85860d76b992985909144ec001317
d2c327133389000e5550c4b1d69a4e94d597a7ac
938baa43478e94d8f642b4a69a42c69b5b078ce8
5aac29d2033a59cba047b985b2a920d1f2fc46f1
63d9f8001c84ab066c13995a1698c50422df0c2e
68617a907867b3ab6a0ce9096fd01df50bd401ff
e225369fd7e0151f36395a1d30970f42717a33ea
3656d11ae7cdcacf80eb178ac9c8d3b0b1f7c42b
62a8c318cd170ed9cdab12b8f3a30548a2c0c711
a634c50e7533a68c8c7f6d358f5512c692ac8f1f
e3e77b044a6aeb91922495779f03716eb4b9f91e
d91b92ce209ba345d8e18ff61b679a0dd3ed2ea2
7a53c4755aa2c4c4ea58fc109475744a0c35a5e4
473515f4b9200f458afca4c6b01d3caf7d380f4b
2d708c3a0ef6e8a620e1613dc8dba6298a042243
cc106f26caf817a162ab1f3ef1ec2b7c68d33f63
03dca715c62b5bb207a151a6a443b721a96649f7
b1ac42868fc58465c3f47f9f1d2f7d3c7a816b8b
92e9ff74eef7fa0952c5a30d81c0d5fb3888b5ac
a529baa6960faae04a3a8aaeb08983c5b083b147
518aedef025abd939a872fd6108e21887506c9b5
3c4a881000b66a083fa60351e70130084a79adf8
8dce63977518693c84ef88fe2307879ed618e177
ece9c5c476c1d278c137a19788679d7c628fb68d
9c35ad7f417eed45ca2b3c21ae109cd5716d4443
f0896f6f0ef7c6ae3cf82537c80867d1e02f365a
181e6f3710bb85bc1391a7ad58e3840eefde7ccd
57204cd3a2d8dc012e72363e27175a0c572b1369
6562d4eb162262a280eab477693022a43fd6b19c
5759aeb913c6dfd47eda7895e1bbe84a58291a13
a7540acbfcb7f5850117025a1310822d7794dc87
87f40c7712099659b5020c7b33caf0ee6786f6c4
da860996059d1c4e11dbabc81fc5402f5a1075f6
fb4801e55e854958b49f83b92311b0c4b39ebc1f
aa9ddd9f8c6554462d583918cb1b7e411b783869
6a506d473e09a0cc5f13bc53a66228b6fa23c0d7
e39ceeef5ea485f5394c2cd8a1be49ba71b8f5b2
b9dd78d950485493f0a37cd4b9b6132e8c87829b
5b4034e9ffe85a1f36c1fc6063a7b9f5f902a312
9f81bbad070ece931921f107e08f2586602fc7cc
35f5f734e6cc858999231a3002da4497a6099477
efdd6bdb65c2f5ac2fd790ecaaddd38c558ace33
e1370cddeaec7b3d9c46f3e222f92a732f899ec4
4c0ab65b0ca9b81568d6a03172821638c1d7d49a
dbf855d4819d4d340abfe5aa1418f9acf4123dcd
618c44fa3c9950a597608dea95f25918ba596005
e830b8ee122ec5c63877c3ab2c59620af6f821a1
924c80f68ce11d3399edcbceb7f1f5853e06bf3d
cb9671544126565b4370eee1aa6a3215f12144e7
f65b0aeb407f2446f4508c80a990ab59a3fb2d54
6f4a2b5f0131e3a79b94277989f8d33e5474d311
98b8744f4487f170759e2c7de5185ae29055c649
4b30decb75efbc75a75e65281804735288e9b73f
913d01244d0833f7c98b2c9fa7d252714a3c8723
ebf0ae1953a7a208fd3ced2c79c6c37773128dcd
6599faa389a8031cd527b1040d8b69feedab64bf
dff994e823ce99048a7581db572d133cdc8eeb90
5f1d8a49cc9140ddcc0e6b72d5c1c1375a999562
57adc0a56b18ba9fe18525ade46800d6ca2e5b36
4bfc46ae98e8ace456dacc1f8f31b6ef4218c3b0
950e404a42539af496127b22ae1cb56e6467f669
903198ade3776ba6e573e3a102dc3e0d23c8f71b
4ad91644bfd6a3e61a734cce9b54c3fc1ed0723d
13d890f54871892cc73511de03593fb97e1a9ca3
cff4ef8c19ff6e6c12299ef2c1c532909cad87cd
2e7b85fa35d4ea11e443731138a2bf357a82b42e
9ef768e787524fe48b4217a4b456c304041df363
52abaeaa5aacd09ea45b16f963f28c5816c1a3b2
dfa967a6ae7221d364b5e491d210be02571357e8
e9a46c4a2ea34997f3ebe8714ea84398706afa91
68e4888945a3d25c4accd32ef18e04dd7dae9b28
f3990b470351b5e06039da7e9f48617ddb2044cd
8ff7eb9b64635b4153e0fe1fa069dc7823afce38
1e37450aee2ccdf92921c260819ce90f575c5915
051cc9488a3f55e8d4f468b3393f438ab40e9ac1
c5eab300ffe90dd918cf364ebed4d472afa80195
e34386b2f0a02f4177bfd486560b55bb2644cf04
5dc5ef27644433327a0a7bbbbfed6cb272aa3ca6
7086fc16df049564481166b4429fb6f4b32b06df
329605a176235b9c811d9314941012a0b4a6a98a
084178379682e27fcc19d5ad4066bace8d4f3985
9a1097f70400d8aba770f03f18964832e3bdea62
c090877f27578d6be60d90868fc35de150a68783
5853903e7a7c21f3656c31750e1dd44eb92a1df1
fc1ad0bd4ffee34b531426fc4a4fdea3114d7c7e
c1a14c2728c845218a61d032a7f40a133b878305
086925f7c3ddcb0c2003a0f2a85b464b325576a4
0b29104eb670406d15d170464435661eb80659f0
c702fdcd1da1b34b389cf58b20aefcc1c072b84d
8561ae8320cdc62e3ae05b5e8922edb331fa0a88
c9215c694b5d395e1ff5239472d18e11d067c35f
2e5764de985c7e52e1699ad7d37c1f2650fb3a0f
ca228aa3e5637decb372e53a12f9659beea453da
463b2a6ebcbd131311d0242453ce8c757ad300bd
0640f9e1dc7dc486b2b05e8aa586640afcc3219c
153efef9e824ee24244339fd0339f82f0acf14a0
261baff517c065ee3cd3a1a4a9f916d5f5ebae46
6675ee88d8d4697dbe308c726d7603d707f6ccdd
d757224b45addf59cd41f28218ee85cf37a7b387
3b463bfe37718e77f5d1190dea01849520a69ca4
75de64338c391be2d7bf3afb82f7764ee151e761
5edcdc23151145160aa81207d1b0bf62f05db438
ea8158b84c0040817a04502552e43d558cd36034
f559eb6d98497675a889c142cca5af55fe754f69
5fbd56200ca29bd2a085824944f9ec017ca3c40e
17b19babf3f38810a1e944bce978374a3a2329b3
7c1104458dbdb4facbfa1bef02dee5730c4a4317
2e383b8db3608e44c0162084abbb3dfbe38d5b71
e2a53fb05643b3e48ed21aaa6a2b9c528701c618
c4b4f69e9bc5b30641f72ab247152dcd40506069
96872a54188cc9f44d3ab47db602ce9958a5f59d
090f6ad8ad15f25f6ae37e00c6bde65cf946a70e
db1adbb487680bacf419b957fdcc8429f8d2f8c0
8572a57fd51115446c79a4c6f6ac464fd03e5ec7
0a1c45cf51ea38f3a2e7f68d3a9c01fd031ef126
d7f6ad2f4f0e3d74381a02065ea409c4a845689b
148827f4fb95ea4e466744563301fe1f49bc2d68
c8af3eea8a1b7e290418526d7091ac90b61dfd43
6ac8619a2b6357c1b2a4155fe9cf2e9a22a8453e
2986fa7633eec65d90a5080c96fef1f54f1cdd60
e242868e85dcf394ae0348050fe4a61233f7beb5
2fcb8ffa439c1b917706da700ac484f96d7526e8
549b75c346d8b745db3f69add7ac002741014314
5ce4db1141384c5da7949827d2ea3ae274020a2b
62ed3ddb81303a8e66cedaa7eb5276c61b53e3df
be7408026ead7c209fc8306f1367c484203a734a
7cd14080ac3f0b06fa760e9fe9a6f0b9326d971d
93114f501851ed0e146294ac3f9090b878935ced
c2fa87e5e5758ac6f836cb592b7ad336f6a7d4ee
93d1cd69b55a970c0f1e3d1b125cc1c821e4ea38
133171744870d76f25a885e2e795f25f749d1b84
a96efa47583bdba66b2de73f09fb140402e393cd
1b9c3b11f34cd79536f6d0034136cc0985351fe5
fc0fbaf5490178b232f09eddca29d62f55840841
b2c0db94aefcbe73d718c606a94f985216c795e1
725bd781d51fdad68a166572de8d59c7221f3676
9a98d6ad172e3e23984b72090f64e2c540d8d571
034774bfc06b885219e553f6633f2d73f3398924
1485bc4a4b021f69810d5a7fa5c32cd83eb08b69
fb111b0af9b20b5cb9a6b0834a0a9d0376443f5a
4ead637a12284f92a695d1e0c6385343541b4528
08dc0848b5f2f48402251c20d1b411580edca894
c46e18544877e30e6e0cd065fdc75434a7204423
3459f1d81b6990cba971f1c6e3cba08d6260841d
f0a4cf9164227ceaa04ed2451028fbe9813c4f97
08fbe0f66845799cfccaeb85160d3f8ec7b27f43
1cfeaa8b2a292bfe247bc5d6e0fa358e93a5185f
cb329a4f5c719423118ef90fa2a5cdb02252f4b4
889bf077d356d312aed501d3529f35c9561f2ee6
d3b27ebbdf376f12c9dde25edd90307aa2ad045f
b9fdc602322f4d9d452d9e21d89885c64aa1c158
e14a130029c0c213eb895159a1f65dd485d19f2e
826937e773d1c2691677355a57243fcf28cfbe63
786b86de970adfd673808b573a49a0d0f877294f
9664e22ac8f8374f7e58c775b25fa91378ccb051
7b1a6bed96de90dbf8c5d0cc329b07f20d6eedd0
a11f6730a0f4e9977557fb97929fa6c7e63ecbce
4c3b4f8e412379772494ed0fc51f9bc426efab2f
ecdcf287c81a11dc8ecebb086e4f7af4846adc27
1e4695b640fb07d283757fce255ada3ca5492df6
63abe058cfacb99be078ca50363ba4b12ffd9c27
b242e9b2158c987e0d4ae74a6b3846f42d739b56
80c28c98fea2e3d2cfbbd1cecb51512b580258c5
4f3749d8ec9835c6addf9c4d379c1927a135a1db
33970adc5a54a07437aa950a5a9ccb163c728972
224a288993c336b01a8424e50849afdc501aa2fe
6516ece3f56818aec6d706726389238507b01aef
e8e4cbd5ce5a125c1aed7cd75d02018592672947
304e047fd284ad6eebf367b01397a1fd4427d444
dcd72872e0831267bc17c72b9ad0c40a1fde502d
431fc07301a0abb3a686fb6456889eb4dde4914f
f6fc01040746c3bd5c860d3ca588c65024fc8acb
63853ef1a89cbf4ec171280d5c0e44000ddb547c
0771902f65c2a7f19042acf165633bff73b0eb54
6830e10e9ce0ed09b4a99f99fdfc3b7c79b92e11
6d529c01f5c610afdf6a7085bb1bc261c24ce706
68686133ab1ac81fac87ef0e2fd614ebcfd3a943
80356e6eef66bf36e2b76317c10bf5c8a0506036
df06f731774e42de22cad5e6eeef09f4784f4995
dad44ae3805a4e67c5f017b92b1bb82e6f9349f4
a480c2c5e522f4ac57c9713f27476d1c09da4609
448d029773e3f1277595362939f67fbf18a371d9
b405e280c0ab175616bf12801f12856897667fc5
5891f92fb929c0d2cb6b454b72e281113ef37f3b
32787906f33c58f47931c6bfd6543403be26e5d2
5bb94d6ad7a9ca0c3aee2c3acf5b63cb63c8816f
9375fc2ef3a49fb0353fca2378feab79198d726b
39344e40d107f695c011f0576b7cc65d03539474
3bee344f982bc6e7fc925fdd21dc0e965432bb9d
2200bdb34f5d735c40443e395c11aa64774d65f3
18880eb2356caff13cdee549a5165d7b1d531588
9d37115d32c3afcbf5925555afa27a306f0579a1
b8dac11a6eafed63eeb1e9df628b41cf38d1a0eb
2146f2a56caa69b3658631a5a18956585ae89d07
3b5f971f7174faaeaf4854520518db1e5a33f982
f47808532e9eafb8192c6ca14ef787c04888ceba
88e716bd4df4be096c1cd691f1fd3baa465a05b1
d495fc05488e64db7c4e1f2e16992f2ba0696c76
f38e2f488c91f1b1bbb96a72d69f9077334cbee3
7c0af5a6c5ff01eb2f273f3f6d408a81d17c29a8
9bf00c5e1a5bff7728b23a4ff2a3862466fa52df
4e37d76c28db6d08c97b6322b51a61a228f824a8
d4334b90343ce5ad0d8945adcb6e26d0e7950a07
bfbcf42187c58a93cda877fa3fd8b2dbf820dd6c
4677fa9d0f067e5f25625e9209aca249776a6f29
f0cc0e5d5d16df35005b4d30d6a90694cf1959bb
ff49a45790d5baaecb2b81e1c1bd7f0968e2a18e
d14bcc28b836b251046d8e91380819b720c8ed9a
87621fcb8f65b4237f58e69cdd3c2de260b55133
9c6213aad1d654ec37f86229947824803c2f6eba
dcbeafcc2504537bf10a67b2dad62b8c4d95f9e7
df5179c5a55401b57ad07737ddb8e5921220c611
be4c7f8b2f73a30a0781d8429e675297c991d4b1
8a290726dee2b7206f932f0a9a23bb6586fde21e
ce1decfb52f1091f6d140716899191a2e6265880
2739c553ddd1f09e28c916ffe21e6a8a4723638e
9c5b4ae1b8df43e06552199a67034b72ac5862ea
e0f8756515588a82214d4e0656e69f34a471864b
55708d7ff731b6222f2eae8c6f93af4f10618a35
6de49ae23ed14edc19082c4a676cce7e9a0878f5
0ca13b33e19735702e9aec865e0c02a4117a6a17
55bbe7a0461e8f988bf6d5e739bcae90e22a73b5
d3e91f6284144394f0c58d2af5fa498128b422f2
b7ead8370286ade5eb95fa158ad9eab392fd3cdd
641b33a7cc14ed505c94811a4520532a119de70a
49b2c1f44c3a856e4047860c398c5960f3a4dac5
3b567253a2a8d3ee938d08abb2df124a0438d3eb
8af90caafd3598a8643bcb6a05e27090ea7e611e
61a198721373a68ef2922f1d4a2a72e8fdbc9b86
c5573712ce5d28b610f2bec2a2e8f6be4868af74
643800167586decca7a5f8b58185920855b3fd7b
13cf98ff98247bdddd8d7532d0fa09c388cf682e
af437ea32f662624b5b9f333abbb84998a70b7d7
53884a8d1432e4842d5a34e08c382854b900d0c8
0ddf228c3c923bc4f60a9257e2c4277735bc5724
52766928b5424d023cf5b9be584f0b3d16d6ddf9
f9d8506b682abf4d477b17146b690f8d057dca82
e76a36205159f5b031edff74744288dc9ad92428
7b314ae4b22273538c8d0852b818351c27433546
628127beca0e503e8bd290be625a0078cdcb89b4
0785eb48e0364132b893959fd4894f363c6f3360
865ccee7e1c631c70e48c5b77b2032552770effc
b9c70b5cdee89455735fbc7e72ff891174a60c26
c179c820dc9169562638fb4a50c6db38644a9f88
d83370079eee17e5d39d4a73711c5cba8487eedf
91e7a6151474c68e28fddc5e686b65f1eee6a34a
dbc8619931f26e5b238d13a59de1c54eb9d5b927
d8ff69bfd0af55e8ea7e4a149f5d6483c6040665
ddfb25b006f6a32425953f0ecc4ab997c6f87b0e
d499dee72ed39c86be5fb71644a9888a88e6d2fb
4bbe7047fc73a6ed12e7e4667ee95f6462bd3bb2
f8f76c9616d06092b737c7767d36ceb409d069c6
97bc036cf3d4b5e0c38bb9940f266787c228bb52
78ca7797c3d8021d23305be2a8072e81ae4a783b
993cb56223596acbab8fbb6f757d85683f9edaaa
0b284d8bf674932766a4dbcd6152daef08df1547
0b6505ceedb763f8df5cc48f6b6b90ca3aeedd9d
5d180174225f2ac5ad7fcb14cc11e25a11174798
cab2ad3d55692ec502cfb205df47b0202407e2bd
bf6640ac3a71b9f5e2f662c3d3e52001be5618de
06af0f6bd915c4f75c089f16eee38c02e02bf613
e0475e56ce0470552fe85d23af87f4fc6d037b52
2589fd57609a8e728e6afe0fe6a53c354078dec3
22abf6a9ff9ecfa60ff68d3fda8379f3fce5fdf5
cfa72dbeeb25063d86b060ba425c3b408fd2c8f5
d3448d7cb6bc188b966b1242d6d717618792d47a
ab053651413e2b7de4f9804fdce2f44c3ba23dd8
e58d2ff33c560a3feae2a9e234203db07281ee07
8fe3b17d04a4354bd6afcfdd5bc774ddf617fbcb
999ceba88e2c466338e8052f5651afc7d7c56c8e
08053115e3bc4a129cbe7c0fe0b4f71cbad29a78
ade8486a08bb8118a028eae5591878ee2757c19c
463a787129a6fa0b8109b671ae676654803cf1e9
0d8a70f0a5ee432e479fa7cb0446c09de6c56d4e
b34635d34d612f190485179278c20c4de75de8f1
a0ed7787bc56f3152c25c7221674d16ab5b2f2aa
7594b51585b2315c3708b8e25209c05d7d01db7f
27e7f8a4f791aa7782839e5ccb3d09e4bf7c0fb8
462d9eddbde5a4abcc80cdf3a9e4c2744bed4202
88d10b606f9bbc9c1850eeefc7053ab15fe5efdd
35423c5c3b0e45399933f6ddabbc535171566d59
0141f445825b3d4786301cf717911c1c53baf94a
e431420cbe808460181cdddd2622537d69494ad3
22f8222289c4f1b9dcf15af8149c38e5086879f1
4514f6541d7dac310705e5824c21abb4aaac8d36
8365995769ca318bee2fe32b88e36906fc0e94b8
3fa85e2622b038a238488b7cebff596bcf13357e
8d8caf956a9b0fe02e377375bcc19f9f61c84e5a
fd7f1f739b67160a568b4f0d9da2518e3469c221
7fcef0fc19c3e453dcfb1c7d5febeae995296880
2c0e0b3f8eda4d84d658d659c412e5bf25a44840
67ae87a3ff4f13d0a27fe710c7c7e2bd159b024c
be66e589bc1205e070566ef339c8fa0590b328c6
74032c99c0eb8200544cb9f7d218dc97e42788dc
8cabaa2086e7d13a96f80db304451b8e1d6c3a33
d2c773ab50e88c9cd7ef034b7a04871bdc67edce
dbe1e5d2c722bb2bdf8a42463ec2c192aad10070
37a6a02462d991415d994558b0d97b1838a0e281
dc90a3d7ab2da0903af4f54db39f2936e60352ff
7c8490ee42747153e9698341ce4cf92807a50023
424720f4085c63c68e2d1dfce3fa74aa10b0de6d
5117c783d492f9f355bbbcc5bf8a52b97e032ce1
d8e3de0851ec160b014b391f483ea2d0890ab0e5
d03b1346e2faca05b6d8969fe37afad5392faf90
0cac035b4517a6e9f1f58e98f4d82598b71e3549
b23702fa585fbdc54f260c8aaad39e404b7aa671
f4d401340dd0137ffbe25a2c18d13450f2ca1d85
8572d202b222a65be0276579c6eeed6c9c976e92
832d8f996cae8dc387864096813dfd0b5b1ee395
a8ce5e1ad9b3610b6a872d5903e83345ccb5ebcb
d9f3e7c8832da0faf7bda387cf5868f8be9cf97b
f3d64e4d6215827077111ed2e943dbf191242949
2f8a07f0d4929262324768563e44ae96163d28df
1219470d2b3155f6cb5b08c4824d44aaf87cac50
030013d031c3ab7a8139051d7f593d1ed429c3e8
16b1bbcc266058bd2ddf9067fb34389f59de21c0
7ef962a8efaaed80a4ad8c3606b1ca4c7c10c765
cbc284c55eb5cf125c6a95670f234a02877f7c67
29f2b7e1fbe80fbb66d4821fdfe0cfed69b35e31
315d7da2ed155f6ba74960b5cd3119ba21caf7b8
4377cbe137fbce7400ce54c87d7c1980bbb90d10
588fbc2f309c6e1798230ab02c68083186a411b3
e030ccb2ece32c891b1a8eb7b9f8da0f287b9e43
b03c2765bdb7923cf6b9161afa5f8b813b7ea8ce
1120f1f35ddd6b4e48e7d33e0c9d892677cbcf8f
143d8c684c7dbf951e6acea4771791872e813c87
23515b090566d3ab3153c8052459c50505b3ede2
d7ca3c966531cc5c8422421e04c1381a8423baec
d9b0cd41eca8eb13f33cd4e3cf61b96d79ea80e4
a104049bf81b5f0f2f5604654734cbefd988097c
e97c5eb6ee1d8b4c8e2214ac4a13a8c83344ac0c
439bd55dc5453878fa5b29547185d7ef669c48f6
0d767f7a784b1ac3dbffb406ea0455008ad27556
c676bd20f61f9a43246e9007818fa1e20c2cd6f9
b4d15d8a68242b89f6eac431009cd5bd8498cd7f
ce2ab321abb53df0bd38e383804fe6ca9419b1a1
52f2e167cf9374e63dcf32cafbfe0baa73694064
14ee00dd13037b9e7ff198da2b7f7782b4dbf1e9
3eb8968bdd1e53261aa9853da8b5e25763f5f599
ee1723a9550bd3d99c5ee4ddcc61eb6b31858a3f
716f56993e18fcf7b160c47a5f88e62eddcfac3e
b0a3737dd5d59c63c851ccdbd7f227c4f4045f5a
278f1763e0d31a95cacb2e9b949fe36624abfa60
6489219e8dd1b36969dcf7aabd501be1c8e0ac68
82cbf91b06415444aa3308d30cd6d3d2a03a89ed
5f49b698180d14b76c94928e578488a92950fa6f
f601bb5f28254fe144b41b750c9af2b06b7b12e9
0ac8cdb3ea73e091eb229fd809db6915817cc372
3a9e1d1dd8b079d0386394c34be55ba5e665c7f3
747ef523a30ff2fc93918ad65109c0b5e4c44bd0
d7c345e6c10d3f626c8c857922ec4ef842141271
81dfb89788eef71ccf12570c25737418ce6b02f5
8888207f4b38a2a9d37e3113988b00497be03507
9d38e49f46e3b68bd58cd84e5b355b577ec7a0c0
d176395e37384ce0a41897578e8478d4c11ff334
41fa405cb5a27f768f6c87affea7c6e886dbb5a1
39b13670dceba9893d9c6374250d0654bc5b20e5
23b44919e101162f3092ab316c5a05a40711e9fc
23cf990d842ea4fb9aefbf91bc39410924f14e72
858d752847c54ff6f42f3a082c0e04fd7206d1f8
c552798aaf513e3e3e3b95abf736de76f998a7bb
4ee969642c1787499bbf60d7db0a4a601d451652
0e0a3770c06ebe3abb7e683a99ac59c305fba794
3b7f386883bd22b2e27478a1dc3ba5ba56a34515
3c4bcdc1015033c49c27c926375163ad512bd69a
89e9cfe26bd200382db0aa7ac0ef3b3cb3cfcff0
94b98bbadd9ff0894d73fbec92556864c7197480
6ec7a8c8530d125aee2bfe483082f331e80a0fb3
d2724feb9065de266a28151f79e9d2f4ca122466
f63b033f38df45076ec6538c59fd074fe54b2acd
d1fd7676c98a980314947c201daf8a55efcbd2d9
cf1637dddcf56d1c55773ab60e2c0c7a3c8f605e
fe659bcc65dba08d438cda9dcb42c0dc5653a605
92bf5fdf5f19f4a9f321be5f7f4ddf09e46bc02d
0e54a45ca42502e006d7952576dff357f46bc5d9
33eaa64ba748547209c340dde14d8712f21c1054
0450f318944b6e40ec6ac51d30e3399eaebb7e02
c61ccce8eb43180b7694feb6b2607c13888866df
8ecbf6dc8943c24d4d704086732723b82b26714a
e351f31289dcdee453ce011ce27168ec4e478411
143ade0a11c244848c4986d888ba13391be19f09
2bbb145369b8b36856b55953e392f1ad9083f9c6
3a9559ded9001e563a57c4b79de753999db5611c
4e868b691af66cca8ce2133807ba4e37d51405ac
1d8e64705ee66370156b52f7e2f554cb9bf2467a
415ef9ab85648c40c09369d286b965888c74d93b
f63443210d814840d97f03b569977da5a344bf03
19f01d7d2bbdba78331fef8341c86d29362e11fc
6437f45d0a71020aec99acc86b450b5467a6f45a
8d432016b3478e332a7c64518e91fe140f44daf0
c4df2200ece51f76c5376356c258f4c77497b2de
2de108c7c20c5031626a3fd3481d8a33f99c87dc
7ac4177b607b71c9937bbb2d77e926847075e964
905a54fa15f0d224778a0757d11b8523ff347ed1
1dc0b9f2f0975305b9b7274c1ca630e845a9e7b0
3b0fadf5831e9883c97382c7195ab24d03fbbc16
66e65259010a7cdfe65c232a41bf59169512c305
ec04b4549fe65678f0b0499df9e32493be53ca4f
efff39c68ab70f4b89bd8e654f9e365745daadf7
7dc5cd091ab06d92ef31f1bb097390215034b9b4
15d41b0cd3057237b6b80dc64b6a8f7a7273518b
3c7751c732f2e03fe112c2ff4764fcc4ea47c35c
fd7e87ca71c0da808d060398512a50e5fd051b21
3db5015470f3db8d024539d6d0dc135e92ecaf8e
a92d129abd123bc60ef4af013f2dfd0596ac7ea6
edc0a1c67fe5e618d7cb5e4944d44316234ba207
42b3e95b318ef40dfb0dbbb05f8f1dd23c68dcbb
61d066d2cbbdcf883e93a6e5e411d1ccfd24e3de
143f2ebb04d69fea380c386c397ef93a4d0febed
c3c90f17e3712af96e66ee5fbed0adaa0b8a3e31
be9be3c2c8b0c35851d07498a75ef564d293d392
a6a5c91ee4f11b7c1596cccbf6612c0ad8468be6
c8790d80052353d2ef538f0017a3ec7e6f9d0027
114c4eca644cd8fa834397b6fb19ae471943a526
2cfd89813beaf4263b52f4abf816b0e5c999abc0
3a68f42823be17f0c3a63b738a4e22c3b50dfff6
bd727768520565b1ac10c316e6247ba318f4be59
e4eaf7db98425874fdf71fadb4bfcd98b42e934c
dbcb1d567308d62a8d7965410b95c670a7556127
bcfd105a7f1894198843fc3aff8ff0f2561b44e2
769e310e9907f3745fb25bd06f030ff7f9e86573
901b7d96a1df09a211c98b473b26f24c3e4adc95
081d7d4123f1d4a317ba52a3748f8d22a642fa30
a2bb37096dff3543f05de97a3c25033ae5cc33a0
dae32966e3a08e3e8b857611605290d25bdf4800
079bd2fc1f8923c022e271d8eca43cc1ccb73812
82e7bcc067e51f12c46e9feb0d7b7047aa05feaf
b762e797f230f8565ad29f1a49cfded288a87c1d
90421c7140c0909ad301eb972574ca857ac92245
607045f647a5488e5f9643bd4d6829e1a334c3ea
919875416c0d60964765658bf63b29de60a23468
8f37ab0ef9db3fd2c251feb1d3375133da4e942c
6c88c09eafc33573fa348b028a8d80598db364be
be172ff6678086deb2ea0b8f5f1e81df327ba68a
9afeee90431894c473eb728a5d798f71dcab2214
83803a802f3fb8875b8b936ea84c23ded374db61
9bce7e71d99262a522dad590b77a09fa5aa784f2
c020f1412dd0b66f611bf6a040a998f5a6bf528d
dd5aa1213fcb44d1aabc375c5031d0834d0cca78
0719740623bfecd021d044b8858641575c7124a6
3924669e1e6d81e203220e214bcbe85cabd24678
8a01cd59dfdc99ec38f02efb602dad5e50938bc1
0b0b02c09247a2fe809278d44c696c7e9ffebd31
a07b1e559945347052463652771ee5b1ded7e3f0
dc6ffd500dd1cb7283757d2c6addfb9b40bf5904
52daa804141a304e7da297a63c0d1283bc45633c
75b17600e3f3fe6ab34866eea077ee24208f83ae
5c277877c3208c06d6fe9c7f78c1a590f29f5c85
04c5169e3b807bece002cdd18c65eea15eba622b
9b5c699ade076c7a6ff7185ebbaa760bd7c42a7b
d1eabc3ebbc83bbc39b5bd33345402f3635b8d37
12ac1dbbb5cf7122ef0092c8fe53391fc7b73e60
2f1043a77a081da4d5703f9380781c7f6ece69a4
c533215b41b019a79b5a2bb331be20d917353064
e8c3468b631f313a9330788bb0dd850fe3187a5f
ce1059152036de97972f1a36f3a844ec20da811a
9578c869c66507338020ff2b59d7f794ff0d1e3a
3ea59d6ea966af44e3e04a9482d4bfa959cb3fa0
f04d5d4693092a4504c465bf16d33a34e20cf90c
43c98d8e400d70a1d7123095841d10cf7876500f
c5f10b9e69aaa06778aa80de1bf68429321ca05d
50e42ddfc10a8be617d63b6f63c40cdbfe6a7dc5
fae2eb2ab7b42bac9e4d47de4664bca44f3f32bf
8f2a6043389f138208bac1dc41872d148bbab11c
357bac8172d0cfb68875a72079dea25fb9e568b7
761792dd8c67068a5b4be988a7d321ece35079b8
fef5b8d0452b430fd65cb17f7485eb457ae6a1c8
5c10115f52eb5fe3feed50bd10caab6431010ca6
3007f19982e1043373b52e12bd4460fd3a0bb4bc
8b991d7a744ffe71cf36be9dcdddc924045c0050
b68cf66fe1be9ffea8b2bdb58c1849e69ff190b2
b90398725590c4f16d9c1f452cde80e1350a67dc
4284f06ddb55aeabf18d9523aee96c6def19a3d7
72fc30abc00ed6e100cb3f0944100ab1cabb5622
2399099505b9287b6779383894f3e5dd679dd058
968df50749c0730f5bc3dc70cdce550c33bca987
3f2478a03fee2ca5112029f3006feaece6882d0a
efdd072889e767b64c533c148416152efedc8af6
098cd59f1d26a65cd9af5ca73f34cc37a7755978
06c8a95bd10b214dd6266052b598268fb5e6a859
91bfa40b1a2b58cf4b2613dad5b7710f1d6f1ab5
bcb1eedd6c0a172bbcb0efb6189536aec0ddad99
9cfd60c3e241599223c382aee6b9b3b49dbd02e3
10b83834cc8dc3615a28b0c3a093bdea7378eac9
c42a4f5207642b32c0cade9e6f9702a478f61f5b
1e2cf7dcf0f6b63647a4fcc7cdefbe3f932718b6
3e571bd0c540cf7e4801c233c91cc1e5b9541250
e09fa1faf9603b29489950b2ac21e87a9cf0deca
f20b1634aa2465fc7cc5927d360a60e006dc40b4
2c26b820d6f8b8a36579af93d7c0d2f935969abc
0dc72f3d00b6d6e6a69557593877b77d14b286ad
dff6088603c4f701776a2d3304764951512dfb01
e07b5b158fcfa33f4621e44fbc314ea7af5a8467
1b6959323346c170cd1ac9f43d0bfc122b798051
03df0822800828da3379ab4ff4269219bec5ad35
36ce2330dcbdde23ec43ee5ae2172320c7128af4
789b5294792423cbc2cb35c5b85d804a3e43a866
899ab4ea706c61c7c68d369fe92aab3dd228f05d
8133be4d045f0308db891e42dc4b849ad8d33461
39e88484c4fac6aa01e9bc234cd3a73e27c8074a
7a3055cfa8ffb54acf9fa48253b075db833be628
dc9d4a3221626b71ff24afe86521ba23f059de64
78dbf542bfcde1cd23854b6aa9a79de3b91d97d4
9eca3c42ee6815ea03aeaf7f2e4ed29e5eb70be9
8674b03b10bee60b9d401616ef0e3ba769765290
2f84ea3e5293d386b5e8e9f4021200c5c5ce552d
ce0db9959eb85860d76b992985909144ec001317
d2c327133389000e5550c4b1d69a4e94d597a7ac
938baa43478e94d8f642b4a69a42c69b5b078ce8
5aac29d2033a59cba047b985b2a920d1f2fc46f1
63d9f8001c84ab066c13995a1698c50422df0c2e
68617a907867b3ab6a0ce9096fd01df50bd401ff
e225369fd7e0151f36395a1d30970f42717a33ea
3656d11ae7cdcacf80eb178ac9c8d3b0b1f7c42b
62a8c318cd170ed9cdab12b8f3a30548a2c0c711
a634c50e7533a68c8c7f6d358f5512c692ac8f1f
e3e77b044a6aeb91922495779f03716eb4b9f91e
d91b92ce209ba345d8e18ff61b679a0dd3ed2ea2
7a53c4755aa2c4c4ea58fc109475744a0c35a5e4
473515f4b9200f458afca4c6b01d3caf7d380f4b
2d708c3a0ef6e8a620e1613dc8dba6298a042243
cc106f26caf817a162ab1f3ef1ec2b7c68d33f63
03dca715c62b5bb207a151a6a443b721a96649f7
b1ac42868fc58465c3f47f9f1d2f7d3c7a816b8b
92e9ff74eef7fa0952c5a30d81c0d5fb3888b5ac
a529baa6960faae04a3a8aaeb08983c5b083b147
518aedef025abd939a872fd6108e21887506c9b5
3c4a881000b66a083fa60351e70130084a79adf8
8dce63977518693c84ef88fe2307879ed618e177
ece9c5c476c1d278c137a19788679d7c628fb68d
9c35ad7f417eed45ca2b3c21ae109cd5716d4443
f0896f6f0ef7c6ae3cf82537c80867d1e02f365a
181e6f3710bb85bc1391a7ad58e3840eefde7ccd
57204cd3a2d8dc012e72363e27175a0c572b1369
6562d4eb162262a280eab477693022a43fd6b19c
5759aeb913c6dfd47eda7895e1bbe84a58291a13
a7540acbfcb7f5850117025a1310822d7794dc87
87f40c7712099659b5020c7b33caf0ee6786f6c4
da860996059d1c4e11dbabc81fc5402f5a1075f6
fb4801e55e854958b49f83b92311b0c4b39ebc1f
aa9ddd9f8c6554462d583918cb1b7e411b783869
6a506d473e09a0cc5f13bc53a66228b6fa23c0d7
e39ceeef5ea485f5394c2cd8a1be49ba71b8f5b2
b9dd78d950485493f0a37cd4b9b6132e8c87829b
5b4034e9ffe85a1f36c1fc6063a7b9f5f902a312
9f81bbad070ece931921f107e08f2586602fc7cc
35f5f734e6cc858999231a3002da4497a6099477
efdd6bdb65c2f5ac2fd790ecaaddd38c558ace33
e1370cddeaec7b3d9c46f3e222f92a732f899ec4
4c0ab65b0ca9b81568d6a03172821638c1d7d49a
dbf855d4819d4d340abfe5aa1418f9acf4123dcd
618c44fa3c9950a597608dea95f25918ba596005
e830b8ee122ec5c63877c3ab2c59620af6f821a1
924c80f68ce11d3399edcbceb7f1f5853e06bf3d
cb9671544126565b4370eee1aa6a3215f12144e7
f65b0aeb407f2446f4508c80a990ab59a3fb2d54
6f4a2b5f0131e3a79b94277989f8d33e5474d311
98b8744f4487f170759e2c7de5185ae29055c649
4b30decb75efbc75a75e65281804735288e9b73f
913d01244d0833f7c98b2c9fa7d252714a3c8723
ebf0ae1953a7a208fd3ced2c79c6c37773128dcd
6599faa389a8031cd527b1040d8b69feedab64bf
dff994e823ce99048a7581db572d133cdc8eeb90
5f1d8a49cc9140ddcc0e6b72d5c1c1375a999562
57adc0a56b18ba9fe18525ade46800d6ca2e5b36
4bfc46ae98e8ace456dacc1f8f31b6ef4218c3b0
950e404a42539af496127b22ae1cb56e6467f669
903198ade3776ba6e573e3a102dc3e0d23c8f71b
4ad91644bfd6a3e61a734cce9b54c3fc1ed0723d
13d890f54871892cc73511de03593fb97e1a9ca3
cff4ef8c19ff6e6c12299ef2c1c532909cad87cd
2e7b85fa35d4ea11e443731138a2bf357a82b42e
9ef768e787524fe48b4217a4b456c304041df363
52abaeaa5aacd09ea45b16f963f28c5816c1a3b2
dfa967a6ae7221d364b5e491d210be02571357e8
e9a46c4a2ea34997f3ebe8714ea84398706afa91
68e4888945a3d25c4accd32ef18e04dd7dae9b28
f3990b470351b5e06039da7e9f48617ddb2044cd
8ff7eb9b64635b4153e0fe1fa069dc7823afce38
1e37450aee2ccdf92921c260819ce90f575c5915
051cc9488a3f55e8d4f468b3393f438ab40e9ac1
c5eab300ffe90dd918cf364ebed4d472afa80195
e34386b2f0a02f4177bfd486560b55bb2644cf04
5dc5ef27644433327a0a7bbbbfed6cb272aa3ca6
7086fc16df049564481166b4429fb6f4b32b06df
329605a176235b9c811d9314941012a0b4a6a98a
084178379682e27fcc19d5ad4066bace8d4f3985
9a1097f70400d8aba770f03f18964832e3bdea62
c090877f27578d6be60d90868fc35de150a68783
5853903e7a7c21f3656c31750e1dd44eb92a1df1
fc1ad0bd4ffee34b531426fc4a4fdea3114d7c7e
c1a14c2728c845218a61d032a7f40a133b878305
086925f7c3ddcb0c2003a0f2a85b464b325576a4
0b29104eb670406d15d170464435661eb80659f0
c702fdcd1da1b34b389cf58b20aefcc1c072b84d
8561ae8320cdc62e3ae05b5e8922edb331fa0a88
c9215c694b5d395e1ff5239472d18e11d067c35f
2e5764de985c7e52e1699ad7d37c1f2650fb3a0f
ca228aa3e5637decb372e53a12f9659beea453da
463b2a6ebcbd131311d0242453ce8c757ad300bd
0640f9e1dc7dc486b2b05e8aa586640afcc3219c
153efef9e824ee24244339fd0339f82f0acf14a0
261baff517c065ee3cd3a1a4a9f916d5f5ebae46
6675ee88d8d4697dbe308c726d7603d707f6ccdd
d757224b45addf59cd41f28218ee85cf37a7b387
3b463bfe37718e77f5d1190dea01849520a69ca4
75de64338c391be2d7bf3afb82f7764ee151e761
5edcdc23151145160aa81207d1b0bf62f05db438
ea8158b84c0040817a04502552e43d558cd36034
f559eb6d98497675a889c142cca5af55fe754f69
5fbd56200ca29bd2a085824944f9ec017ca3c40e
17b19babf3f38810a1e944bce978374a3a2329b3
7c1104458dbdb4facbfa1bef02dee5730c4a4317
2e383b8db3608e44c0162084abbb3dfbe38d5b71
e2a53fb05643b3e48ed21aaa6a2b9c528701c618
c4b4f69e9bc5b30641f72ab247152dcd40506069
96872a54188cc9f44d3ab47db602ce9958a5f59d
090f6ad8ad15f25f6ae37e00c6bde65cf946a70e
db1adbb487680bacf419b957fdcc8429f8d2f8c0
8572a57fd51115446c79a4c6f6ac464fd03e5ec7
0a1c45cf51ea38f3a2e7f68d3a9c01fd031ef126
d7f6ad2f4f0e3d74381a02065ea409c4a845689b
148827f4fb95ea4e466744563301fe1f49bc2d68
c8af3eea8a1b7e290418526d7091ac90b61dfd43
6ac8619a2b6357c1b2a4155fe9cf2e9a22a8453e
2986fa7633eec65d90a5080c96fef1f54f1cdd60
e242868e85dcf394ae0348050fe4a61233f7beb5
2fcb8ffa439c1b917706da700ac484f96d7526e8
549b75c346d8b745db3f69add7ac002741014314
5ce4db1141384c5da7949827d2ea3ae274020a2b
62ed3ddb81303a8e66cedaa7eb5276c61b53e3df
be7408026ead7c209fc8306f1367c484203a734a
7cd14080ac3f0b06fa760e9fe9a6f0b9326d971d
93114f501851ed0e146294ac3f9090b878935ced
c2fa87e5e5758ac6f836cb592b7ad336f6a7d4ee
93d1cd69b55a970c0f1e3d1b125cc1c821e4ea38
133171744870d76f25a885e2e795f25f749d1b84
a96efa47583bdba66b2de73f09fb140402e393cd
1b9c3b11f34cd79536f6d0034136cc0985351fe5
fc0fbaf5490178b232f09eddca29d62f55840841
b2c0db94aefcbe73d718c606a94f985216c795e1
725bd781d51fdad68a166572de8d59c7221f3676
9a98d6ad172e3e23984b72090f64e2c540d8d571
034774bfc06b885219e553f6633f2d73f3398924
1485bc4a4b021f69810d5a7fa5c32cd83eb08b69
fb111b0af9b20b5cb9a6b0834a0a9d0376443f5a
4ead637a12284f92a695d1e0c6385343541b4528
08dc0848b5f2f48402251c20d1b411580edca894
c46e18544877e30e6e0cd065fdc75434a7204423
3459f1d81b6990cba971f1c6e3cba08d6260841d
f0a4cf9164227ceaa04ed2451028fbe9813c4f97
08fbe0f66845799cfccaeb85160d3f8ec7b27f43
1cfeaa8b2a292bfe247bc5d6e0fa358e93a5185f
cb329a4f5c719423118ef90fa2a5cdb02252f4b4
889bf077d356d312aed501d3529f35c9561f2ee6
d3b27ebbdf376f12c9dde25edd90307aa2ad045f
b9fdc602322f4d9d452d9e21d89885c64aa1c158
e14a130029c0c213eb895159a1f65dd485d19f2e
826937e773d1c2691677355a57243fcf28cfbe63
786b86de970adfd673808b573a49a0d0f877294f
9664e22ac8f8374f7e58c775b25fa91378ccb051
7b1a6bed96de90dbf8c5d0cc329b07f20d6eedd0
a11f6730a0f4e9977557fb97929fa6c7e63ecbce
4c3b4f8e412379772494ed0fc51f9bc426efab2f
ecdcf287c81a11dc8ecebb086e4f7af4846adc27
1e4695b640fb07d283757fce255ada3ca5492df6
63abe058cfacb99be078ca50363ba4b12ffd9c27
b242e9b2158c987e0d4ae74a6b3846f42d739b56
80c28c98fea2e3d2cfbbd1cecb51512b580258c5
4f3749d8ec9835c6addf9c4d379c1927a135a1db
33970adc5a54a07437aa950a5a9ccb163c728972
224a288993c336b01a8424e50849afdc501aa2fe
6516ece3f56818aec6d706726389238507b01aef
e8e4cbd5ce5a125c1aed7cd75d02018592672947
304e047fd284ad6eebf367b01397a1fd4427d444
dcd72872e0831267bc17c72b9ad0c40a1fde502d
431fc07301a0abb3a686fb6456889eb4dde4914f
f6fc01040746c3bd5c860d3ca588c65024fc8acb
63853ef1a89cbf4ec171280d5c0e44000ddb547c
0771902f65c2a7f19042acf165633bff73b0eb54
6830e10e9ce0ed09b4a99f99fdfc3b7c79b92e11
6d529c01f5c610afdf6a7085bb1bc261c24ce706
68686133ab1ac81fac87ef0e2fd614ebcfd3a943
80356e6eef66bf36e2b76317c10bf5c8a0506036
df06f731774e42de22cad5e6eeef09f4784f4995
dad44ae3805a4e67c5f017b92b1bb82e6f9349f4
a480c2c5e522f4ac57c9713f27476d1c09da4609
448d029773e3f1277595362939f67fbf18a371d9
b405e280c0ab175616bf12801f12856897667fc5
5891f92fb929c0d2cb6b454b72e281113ef37f3b
32787906f33c58f47931c6bfd6543403be26e5d2
5bb94d6ad7a9ca0c3aee2c3acf5b63cb63c8816f
9375fc2ef3a49fb0353fca2378feab79198d726b
39344e40d107f695c011f0576b7cc65d03539474
3bee344f982bc6e7fc925fdd21dc0e965432bb9d
2200bdb34f5d735c40443e395c11aa64774d65f3
18880eb2356caff13cdee549a5165d7b1d531588
9d37115d32c3afcbf5925555afa27a306f0579a1
b8dac11a6eafed63eeb1e9df628b41cf38d1a0eb
2146f2a56caa69b3658631a5a18956585ae89d07
3b5f971f7174faaeaf4854520518db1e5a33f982
f47808532e9eafb8192c6ca14ef787c04888ceba
88e716bd4df4be096c1cd691f1fd3baa465a05b1
d495fc05488e64db7c4e1f2e16992f2ba0696c76
f38e2f488c91f1b1bbb96a72d69f9077334cbee3
7c0af5a6c5ff01eb2f273f3f6d408a81d17c29a8
9bf00c5e1a5bff7728b23a4ff2a3862466fa52df
4e37d76c28db6d08c97b6322b51a61a228f824a8
d4334b90343ce5ad0d8945adcb6e26d0e7950a07
bfbcf42187c58a93cda877fa3fd8b2dbf820dd6c
4677fa9d0f067e5f25625e9209aca249776a6f29
f0cc0e5d5d16df35005b4d30d6a90694cf1959bb
ff49a45790d5baaecb2b81e1c1bd7f0968e2a18e
d14bcc28b836b251046d8e91380819b720c8ed9a
87621fcb8f65b4237f58e69cdd3c2de260b55133
9c6213aad1d654ec37f86229947824803c2f6eba
dcbeafcc2504537bf10a67b2dad62b8c4d95f9e7
df5179c5a55401b57ad07737ddb8e5921220c611
be4c7f8b2f73a30a0781d8429e675297c991d4b1
8a290726dee2b7206f932f0a9a23bb6586fde21e
ce1decfb52f1091f6d140716899191a2e6265880
2739c553ddd1f09e28c916ffe21e6a8a4723638e
9c5b4ae1b8df43e06552199a67034b72ac5862ea
e0f8756515588a82214d4e0656e69f34a471864b
55708d7ff731b6222f2eae8c6f93af4f10618a35
6de49ae23ed14edc19082c4a676cce7e9a0878f5
0ca13b33e19735702e9aec865e0c02a4117a6a17
55bbe7a0461e8f988bf6d5e739bcae90e22a73b5
d3e91f6284144394f0c58d2af5fa498128b422f2
b7ead8370286ade5eb95fa158ad9eab392fd3cdd
641b33a7cc14ed505c94811a4520532a119de70a
49b2c1f44c3a856e4047860c398c5960f3a4dac5
3b567253a2a8d3ee938d08abb2df124a0438d3eb
8af90caafd3598a8643bcb6a05e27090ea7e611e
61a198721373a68ef2922f1d4a2a72e8fdbc9b86
c5573712ce5d28b610f2bec2a2e8f6be4868af74
643800167586decca7a5f8b58185920855b3fd7b
13cf98ff98247bdddd8d7532d0fa09c388cf682e
af437ea32f662624b5b9f333abbb84998a70b7d7
53884a8d1432e4842d5a34e08c382854b900d0c8
0ddf228c3c923bc4f60a9257e2c4277735bc5724
52766928b5424d023cf5b9be584f0b3d16d6ddf9
f9d8506b682abf4d477b17146b690f8d057dca82
e76a36205159f5b031edff74744288dc9ad92428
7b314ae4b22273538c8d0852b818351c27433546
628127beca0e503e8bd290be625a0078cdcb89b4
0785eb48e0364132b893959fd4894f363c6f3360
865ccee7e1c631c70e48c5b77b2032552770effc
b9c70b5cdee89455735fbc7e72ff891174a60c26
c179c820dc9169562638fb4a50c6db38644a9f88
d83370079eee17e5d39d4a73711c5cba8487eedf
91e7a6151474c68e28fddc5e686b65f1eee6a34a
dbc8619931f26e5b238d13a59de1c54eb9d5b927
d8ff69bfd0af55e8ea7e4a149f5d6483c6040665
ddfb25b006f6a32425953f0ecc4ab997c6f87b0e
d499dee72ed39c86be5fb71644a9888a88e6d2fb
4bbe7047fc73a6ed12e7e4667ee95f6462bd3bb2
f8f76c9616d06092b737c7767d36ceb409d069c6
97bc036cf3d4b5e0c38bb9940f266787c228bb52
78ca7797c3d8021d23305be2a8072e81ae4a783b
993cb56223596acbab8fbb6f757d85683f9edaaa
0b284d8bf674932766a4dbcd6152daef08df1547
0b6505ceedb763f8df5cc48f6b6b90ca3aeedd9d
5d180174225f2ac5ad7fcb14cc11e25a11174798
cab2ad3d55692ec502cfb205df47b0202407e2bd
bf6640ac3a71b9f5e2f662c3d3e52001be5618de
06af0f6bd915c4f75c089f16eee38c02e02bf613
e0475e56ce0470552fe85d23af87f4fc6d037b52
2589fd57609a8e728e6afe0fe6a53c354078dec3
22abf6a9ff9ecfa60ff68d3fda8379f3fce5fdf5
cfa72dbeeb25063d86b060ba425c3b408fd2c8f5
d3448d7cb6bc188b966b1242d6d717618792d47a
ab053651413e2b7de4f9804fdce2f44c3ba23dd8
e58d2ff33c560a3feae2a9e234203db07281ee07
8fe3b17d04a4354bd6afcfdd5bc774ddf617fbcb
999ceba88e2c466338e8052f5651afc7d7c56c8e
08053115e3bc4a129cbe7c0fe0b4f71cbad29a78
ade8486a08bb8118a028eae5591878ee2757c19c
463a787129a6fa0b8109b671ae676654803cf1e9
0d8a70f0a5ee432e479fa7cb0446c09de6c56d4e
b34635d34d612f190485179278c20c4de75de8f1
a0ed7787bc56f3152c25c7221674d16ab5b2f2aa
7594b51585b2315c3708b8e25209c05d7d01db7f
27e7f8a4f791aa7782839e5ccb3d09e4bf7c0fb8
462d9eddbde5a4abcc80cdf3a9e4c2744bed4202
88d10b606f9bbc9c1850eeefc7053ab15fe5efdd
35423c5c3b0e45399933f6ddabbc535171566d59
0141f445825b3d4786301cf717911c1c53baf94a
e431420cbe808460181cdddd2622537d69494ad3
22f8222289c4f1b9dcf15af8149c38e5086879f1
4514f6541d7dac310705e5824c21abb4aaac8d36
8365995769ca318bee2fe32b88e36906fc0e94b8
3fa85e2622b038a238488b7cebff596bcf13357e
8d8caf956a9b0fe02e377375bcc19f9f61c84e5a
fd7f1f739b67160a568b4f0d9da2518e3469c221
7fcef0fc19c3e453dcfb1c7d5febeae995296880
# -*- coding: utf-8 -*-
__author__ = 'ian'
from scrapy.cmdline import execute
import sys
import os
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
execute(["scrapy", "crawl", "jobbole"]) # 相当于执行scrapy crawl jobbole
# execute(["scrapy", "crawl", "zhihu"])
# execute(["scrapy", "crawl", "lagou"])
\ No newline at end of file
<!doctype html>
<html lang="zh" data-reactroot="" data-reactid="1" data-react-checksum="-1956243239"><head data-reactid="2"><meta charset="utf-8" data-reactid="3"/><title data-react-helmet="true" data-reactid="4">属于「知乎官方指南」的问答有哪些? - 知乎</title><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1" data-reactid="5"/><meta name="renderer" content="webkit" data-reactid="6"/><meta name="force-rendering" content="webkit" data-reactid="7"/><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" data-reactid="8"/><meta name="google-site-verification" content="FTeR0c8arOPKh8c5DYh_9uu98_zJbaWw53J-Sch9MTg" data-reactid="9"/><meta data-react-helmet="true" name="apple-itunes-app" content="app-id=432274380, app-argument=zhihu://question/19581624" data-reactid="10"/><link rel="shortcut icon" type="image/x-icon" href="https://static.zhihu.com/static/favicon.ico" data-reactid="11"/><link rel="dns-prefetch" href="//static.zhihu.com" data-reactid="12"/><link rel="dns-prefetch" href="//pic1.zhihu.com" data-reactid="13"/><link rel="dns-prefetch" href="//pic2.zhihu.com" data-reactid="14"/><link rel="dns-prefetch" href="//pic3.zhihu.com" data-reactid="15"/><link rel="dns-prefetch" href="//pic4.zhihu.com" data-reactid="16"/><link href="https://static.zhihu.com/heifetz/main.app.7842448a78335358bb99.css" rel="stylesheet" data-reactid="17"/></head><body class="Entry-body" data-reactid="18"><div id="root" data-reactid="19"><div><div class="LoadingBar"></div><div><header role="banner" class="Sticky AppHeader" data-za-module="TopNavBar"><div class="AppHeader-inner"><a href="/" aria-label="知乎"><svg viewBox="0 0 200 91" class="Icon Icon--logo" style="fill:#0f88eb;height:30px;width:64px;" width="64" height="30" aria-hidden="true"><title></title><g><path d="M53.29 80.035l7.32.002 2.41 8.24 13.128-8.24h15.477v-67.98H53.29v67.978zm7.79-60.598h22.756v53.22h-8.73l-8.718 5.473-1.587-5.46-3.72-.012v-53.22zM46.818 43.162h-16.35c.545-8.467.687-16.12.687-22.955h15.987s.615-7.05-2.68-6.97H16.807c1.09-4.1 2.46-8.332 4.1-12.708 0 0-7.523 0-10.085 6.74-1.06 2.78-4.128 13.48-9.592 24.41 1.84-.2 7.927-.37 11.512-6.94.66-1.84.785-2.08 1.605-4.54h9.02c0 3.28-.374 20.9-.526 22.95H6.51c-3.67 0-4.863 7.38-4.863 7.38H22.14C20.765 66.11 13.385 79.24 0 89.62c6.403 1.828 12.784-.29 15.937-3.094 0 0 7.182-6.53 11.12-21.64L43.92 85.18s2.473-8.402-.388-12.496c-2.37-2.788-8.768-10.33-11.496-13.064l-4.57 3.627c1.363-4.368 2.183-8.61 2.46-12.71H49.19s-.027-7.38-2.372-7.38zm128.752-.502c6.51-8.013 14.054-18.302 14.054-18.302s-5.827-4.625-8.556-1.27c-1.874 2.548-11.51 15.063-11.51 15.063l6.012 4.51zm-46.903-18.462c-2.814-2.577-8.096.667-8.096.667s12.35 17.2 12.85 17.953l6.08-4.29s-8.02-11.752-10.83-14.33zM199.99 46.5c-6.18 0-40.908.292-40.953.292v-31.56c1.503 0 3.882-.124 7.14-.376 12.773-.753 21.914-1.25 27.427-1.504 0 0 3.817-8.496-.185-10.45-.96-.37-7.24 1.43-7.24 1.43s-51.63 5.153-72.61 5.64c.5 2.756 2.38 5.336 4.93 6.11 4.16 1.087 7.09.53 15.36.277 7.76-.5 13.65-.76 17.66-.76v31.19h-41.71s.88 6.97 7.97 7.14h33.73v22.16c0 4.364-3.498 6.87-7.65 6.6-4.4.034-8.15-.36-13.027-.566.623 1.24 1.977 4.496 6.035 6.824 3.087 1.502 5.054 2.053 8.13 2.053 9.237 0 14.27-5.4 14.027-14.16V53.93h38.235c3.026 0 2.72-7.432 2.72-7.432z" fill-rule="evenodd"/></g></svg></a><nav role="navigation" class="AppHeader-nav"><a class="AppHeader-navItem" href="/">首页</a><a class="AppHeader-navItem" href="/explore">发现</a><a class="AppHeader-navItem" href="/topic">话题</a></nav><div class="SearchBar" role="search"><div class="SearchBar-toolWrapper"><form class="SearchBar-tool"><div><div class="Popover"><div class="SearchBar-input Input-wrapper Input-wrapper--grey"><input type="text" maxlength="100" value="" autocomplete="off" role="combobox" aria-expanded="false" aria-autocomplete="list" aria-activedescendant="AutoComplete-73027-31344--1" id="Popover-73027-89498-toggle" aria-haspopup="true" aria-owns="Popover-73027-89498-content" class="Input" placeholder="搜索你感兴趣的内容…"/></div></div></div><button class="Button SearchBar-searchIcon Button--plain" aria-label="搜索" type="button"><svg viewBox="0 0 16 16" class="Icon Icon--search" style="height:16px;width:16px;" width="16" height="16" aria-hidden="true"><title></title><g><path d="M12.054 10.864c.887-1.14 1.42-2.57 1.42-4.127C13.474 3.017 10.457 0 6.737 0S0 3.016 0 6.737c0 3.72 3.016 6.737 6.737 6.737 1.556 0 2.985-.533 4.127-1.42l3.103 3.104c.765.46 1.705-.37 1.19-1.19l-3.103-3.104zm-5.317.925c-2.786 0-5.053-2.267-5.053-5.053S3.95 1.684 6.737 1.684 11.79 3.95 11.79 6.737 9.522 11.79 6.736 11.79z"/></g></svg></button><div class="SearchBar-iconDecorator"></div></form></div><button class="Button SearchBar-askButton Button--primary Button--blue" type="button">提问</button></div><div class="AppHeader-userInfo"><button class="Button PushNotifications-icon AppHeader-notifications Button--plain" type="button"><svg viewBox="0 0 20 22" class="Icon Icon--news" style="height:20px;width:20px;" width="20" height="20" aria-hidden="true"><title></title><g><path d="M2.502 14.08C3.1 10.64 2 3 8.202 1.62 8.307.697 9.08 0 10 0s1.694.697 1.797 1.62C18 3 16.903 10.64 17.497 14.076c.106 1.102.736 1.855 1.7 2.108.527.142.868.66.793 1.206-.075.546-.542.95-1.09.943H1.1C.55 18.34.084 17.936.01 17.39c-.075-.547.266-1.064.794-1.206.963-.253 1.698-1.137 1.698-2.104zM10 22c-1.417.003-2.602-1.086-2.73-2.51-.004-.062.02-.124.063-.17.043-.045.104-.07.166-.07h5c.063 0 .124.025.167.07.044.046.067.108.063.17-.128 1.424-1.313 2.513-2.73 2.51z" /></g></svg></button><button class="Button Messages-icon AppHeader-messages Button--plain" type="button"><svg viewBox="0 0 20 20" class="Icon Icon--message" style="height:20px;width:20px;" width="20" height="20" aria-hidden="true"><title></title><g><path d="M9 0C3.394 0 0 4.13 0 8c0 1.654.522 3.763 2.014 5.566.314.292.518.82.454 1.17-.165 1.488-.842 1.905-.842 1.905-.328.332.105.67.588.582 1.112-.2 2.07-.58 3.526-1.122.4-.202.464-.147.78-.078C11.524 17.764 18 14 18 8c0-3.665-3.43-8-9-8z"/><path d="M19.14 9.628c.758.988.86 2.01.86 3.15 0 1.195-.62 3.11-1.368 3.938-.21.23-.354.467-.308.722.12 1.073.614 1.5.614 1.5.237.24-.188.563-.537.5-.802-.145-1.494-.42-2.545-.81-.29-.146-.336-.106-.563-.057-2.043.712-4.398.476-6.083-.926 5.964-.524 8.726-3.03 9.93-8.016z"/></g></svg></button><div class="AppHeader-profile"><button class="Button AppHeader-profileEntry Button--plain" type="button"><img class="Avatar" style="width:30px;height:30px;" src="https://pic1.zhimg.com/da8e974dc_is.jpg" srcset="https://pic1.zhimg.com/da8e974dc_im.jpg 2x"/></button></div></div></div></header></div><main role="main" class="App-main"><div><div><div class="QuestionStatus"></div><div class="QuestionHeader"><div class="QuestionHeader-content"><div class="QuestionHeader-main"><div class="QuestionHeader-topics"><div class="Tag QuestionTopic"><span class="Tag-content"><a class="TopicLink" href="/topic/19550235"><div class="Popover"><div id="Popover-73031-70361-toggle" aria-haspopup="true" aria-expanded="false" aria-owns="Popover-73031-70361-content">知乎指南</div></div></a></span></div></div><h1 class="QuestionHeader-title">属于「知乎官方指南」的问答有哪些?</h1><div class="QuestionHeader-detail"><div class="QuestionRichText QuestionRichText--collapsed"><span class="RichText">以下知乎官方指南中的全部问题,今后可能会有所调整!</span></div></div></div><div class="QuestionHeader-side"><div class="QuestionHeader-follow-status"><div class="QuestionFollowStatus"><div class="NumberBoard QuestionFollowStatus-counts"><button class="Button NumberBoard-item Button--plain" type="button"><div class="NumberBoard-name">关注者</div><div class="NumberBoard-value">12487</div></button><div class="NumberBoard-divider"></div><div class="NumberBoard-item"><div class="NumberBoard-name">被浏览</div><div class="NumberBoard-value">8511208</div></div></div></div></div></div></div><div class="QuestionHeader-footer"><div class="QuestionHeader-footer-inner"><div class="QuestionHeader-main QuestionHeader-footer-main"><div class="QuestionHeader-actions"><button class="Button Button--plain" type="button"><svg viewBox="0 0 18 18" class="Icon Icon--comment Icon--left" style="height:16px;width:12px;" width="12" height="16" aria-hidden="true"><title></title><g><path d="M7.24 16.313c-.272-.047-.553.026-.77.2-1.106.813-2.406 1.324-3.77 1.482-.16.017-.313-.06-.394-.197-.082-.136-.077-.308.012-.44.528-.656.906-1.42 1.11-2.237.04-.222-.046-.45-.226-.588C1.212 13.052.027 10.73 0 8.25 0 3.7 4.03 0 9 0s9 3.7 9 8.25-4.373 9.108-10.76 8.063z"/></g></svg>41 条评论</button><div class="Popover ShareMenu"><div id="Popover-73033-90786-toggle" aria-haspopup="true" aria-expanded="false" aria-owns="Popover-73033-90786-content"><button class="Button Button--plain" type="button"><svg viewBox="0 0 20 18" class="Icon Icon--share Icon--left" style="height:16px;width:13px;" width="13" height="16" aria-hidden="true"><title></title><g><path d="M.93 3.89C-.135 4.13-.343 5.56.614 6.098L5.89 9.005l8.168-4.776c.25-.128.477.197.273.388L7.05 10.66l.926 5.953c.18 1.084 1.593 1.376 2.182.456l9.644-15.243c.584-.892-.212-2.03-1.234-1.796L.93 3.89z"/></g></svg>分享</button></div></div><button class="Button Button--plain" type="button"><svg viewBox="0 0 20 20" class="Icon Icon--star Icon--left" style="height:16px;width:13px;" width="13" height="16" aria-hidden="true"><title></title><g><path d="M3.515 17.64l.918-5.355-3.89-3.792c-.926-.902-.64-1.784.64-1.97L6.56 5.74 8.964.87c.572-1.16 1.5-1.16 2.072 0l2.404 4.87 5.377.783c1.28.186 1.566 1.068.64 1.97l-3.89 3.793.918 5.354c.22 1.274-.532 1.82-1.676 1.218L10 16.33l-4.808 2.528c-1.145.602-1.896.056-1.677-1.218z"/></g></svg>邀请回答</button><button class="Button Button--plain" type="button"><svg viewBox="0 0 18 20" class="Icon Icon--report Icon--left" style="height:16px;width:11px;" width="11" height="16" aria-hidden="true"><title></title><g><path d="M16.947 1.13c-.633.135-3.927.638-5.697.384-3.133-.45-4.776-2.54-9.95-.888C.305 1.04.025 1.664.025 2.646L0 18.807c0 .3.1.54.304.718.195.202.438.304.73.304.275 0 .52-.102.73-.304.202-.18.304-.418.304-.718v-6.58c4.533-1.235 8.047.668 8.562.864 2.343.893 5.542.008 6.774-.657.397-.178.596-.474.596-.887V1.964c0-.6-.42-.972-1.053-.835z"/></g></svg>举报</button><div class="Popover"><button class="Button Button--plain" type="button" id="Popover-73034-79139-toggle" aria-haspopup="true" aria-expanded="false" aria-owns="Popover-73034-79139-content"><svg viewBox="0 0 18 4" class="Icon Icon--dots" style="height:16px;width:14px;" width="14" height="16" aria-hidden="true"><title></title><g><g><circle cx="2" cy="2" r="2"/><circle cx="9" cy="2" r="2"/><circle cx="16" cy="2" r="2"/></g></g></svg></button></div></div><div class="QuestionHeader-actions"></div></div><div class="QuestionHeader-side"><div class="QuestionButtonGroup"><button class="Button Button--primary Button--blue" type="button">关注问题</button></div></div></div></div></div><div><div><div class="Sticky"></div></div></div></div><div class="Question-main"><div class="Question-mainColumn"><div><div class="Card"><div class="List"><div class="List-header"><h4 class="List-headerText"><span>1 个回答</span></h4><div class="List-headerOptions"><div class="Popover"><button class="Button Select-button Select-plainButton Button--plain" role="combobox" aria-expanded="false" type="button" id="Popover-73037-28061-toggle" aria-haspopup="true" aria-owns="Popover-73037-28061-content">默认排序<svg viewBox="0 0 8 13" class="Icon Select-arrow Icon--select" style="height:16px;width:8px;" width="8" height="16" aria-hidden="true"><title></title><g><path d="M4 11.183L1.284 8.218c-.293-.29-.77-.29-1.064 0-.293.29-.293.76 0 1.052l3.25 3.512c.292.29.768.29 1.062 0L7.78 9.27c.293-.29.293-.76 0-1.052-.295-.29-.77-.29-1.064 0L4 11.182zM4 1.818L1.284 4.782c-.293.29-.77.29-1.064 0-.293-.29-.293-.76 0-1.052L3.47.218c.292-.29.768-.29 1.062 0L7.78 3.73c.293.29.293.76 0 1.052-.295.29-.77.29-1.064 0L4 1.82z"/></g></svg></button></div></div></div><div><div class="List-item"><div><div class="ContentItem" data="[object Object]"><div class="ContentItem-meta"><div class="AnswerItem-meta AnswerItem-meta--related"><div class="AuthorInfo"><span class="UserLink AuthorInfo-avatarWrapper"><div class="Popover"><div id="Popover-73039-66666-toggle" aria-haspopup="true" aria-expanded="false" aria-owns="Popover-73039-66666-content"><a class="UserLink-link" href="/people/zhihuadmin"><img class="Avatar AuthorInfo-avatar" style="width:38px;height:38px;" src="https://pic3.zhimg.com/34bf96bf5584ac4b5264bd7ed4fdbc5a_xs.jpg" srcset="https://pic3.zhimg.com/34bf96bf5584ac4b5264bd7ed4fdbc5a_l.jpg 2x" alt="知乎小管家"/></a></div></div></span><div class="AuthorInfo-content"><div class="AuthorInfo-name"><span class="UserLink"><div class="Popover"><div id="Popover-73040-61375-toggle" aria-haspopup="true" aria-expanded="false" aria-owns="Popover-73040-61375-content"><a class="UserLink-link" href="/people/zhihuadmin">知乎小管家</a></div></div><a class="UserLink-badge" href="/question/48510028" target="_blank" data-tooltip="已认证的个人"><svg viewBox="0 0 20 20" class="Icon Icon--badgeCert" style="height:16px;width:16px;" width="16" height="16" aria-hidden="true"><title>用户标识</title><g><g fill="none" fill-rule="evenodd"> <path d="M.64 11.39c1.068.895 1.808 2.733 1.66 4.113l.022-.196c-.147 1.384.856 2.4 2.24 2.278l-.198.016c1.387-.12 3.21.656 4.083 1.735l-.125-.154c.876 1.085 2.304 1.093 3.195.028l-.127.152c.895-1.068 2.733-1.808 4.113-1.66l-.198-.022c1.386.147 2.402-.856 2.28-2.238l.016.197c-.12-1.388.656-3.212 1.735-4.084l-.154.125c1.084-.876 1.093-2.304.028-3.195l.152.127c-1.068-.895-1.808-2.732-1.66-4.113l-.022.198c.147-1.386-.856-2.4-2.24-2.28l.198-.016c-1.387.122-3.21-.655-4.083-1.734l.125.153C10.802-.265 9.374-.274 8.483.79L8.61.64c-.895 1.068-2.733 1.808-4.113 1.662l.198.02c-1.386-.147-2.4.857-2.28 2.24L2.4 4.363c.12 1.387-.656 3.21-1.735 4.084l.154-.126C-.265 9.2-.274 10.626.79 11.517L.64 11.39z" fill="#0F88EB"/> <path d="M7.78 13.728l-2.633-3s-.458-.704.242-1.36c.7-.658 1.327-.22 1.327-.22L8.67 11.28l4.696-4.93s.663-.35 1.3.197c.635.545.27 1.382.27 1.382s-3.467 3.857-5.377 5.78c-.98.93-1.78.018-1.78.018z" fill="#FFF"/>1 </g></g></svg></a></span></div><div class="AuthorInfo-badge">知乎官方帐号</div></div></div><div class="AnswerItem-extraInfo"><span class="Voters"><button class="Button Button--plain" type="button">159 人赞同了该回答</button></span></div></div></div><div class="ContentItem-content ContentItem-content--unescapable"><div><div><span class="RichText CopyrightRichText-richText"><a href="http://www.zhihu.com/question/20133162" class="internal">知乎的社区基本原则是什么?</a><br><br>【知乎入门】<br><ul><li><a href="http://www.zhihu.com/question/19550225" class="internal">如何使用知乎?</a></li><li><a href="http://www.zhihu.com/question/19790711" class="internal">在知乎不可以做哪些事?</a><br></li><li>(新增)<a href="http://www.zhihu.com/question/20239684" class="internal">在知乎上,什么是不友善内容?</a><br></li><li>(新增)<a href="http://www.zhihu.com/question/24039476" class="internal">知乎上的不友善内容会被怎样处理?</a><br></li><li>(新增)<a href="http://www.zhihu.com/question/24039610" class="internal">如果在知乎上发布了不友善内容,帐号可能会被怎样处理?</a><br></li></ul><br>【关于提问】<br><ul><li><a href="http://www.zhihu.com/question/19550238" class="internal">为什么别人可以修改我在知乎上的提问?</a><br></li><li><a href="http://www.zhihu.com/question/19806261" class="internal">知乎的提问规范有哪些?</a><br></li><li><a href="http://www.zhihu.com/question/20414919" class="internal">知乎的问题修改规范有哪些?</a></li><li><a href="http://www.zhihu.com/question/19567351" class="internal">在知乎提的问题无人问津,有什么办法可以重新让人讨论这个问题?</a></li><li><a href="http://www.zhihu.com/question/19550701" class="internal">知乎对于那些能直接通过 Google、维基百科等找到答案的问题是什么态度?</a></li><li><a href="http://www.zhihu.com/question/19570036" class="internal">什么是「问题重定向」?如何正确使用该功能解决重复问题?</a></li><li><a href="http://www.zhihu.com/question/19550674" class="internal">为什么说知乎的问题是公共资源而非个人所属?</a><br></li><li><a href="http://www.zhihu.com/question/19552850" class="internal">为什么知乎鼓励让问题减少个人特色?</a></li><li><a href="http://www.zhihu.com/question/21290061" class="internal">为什么部分问题会被「关闭」「建议修改」?</a><br></li><li><a href="http://www.zhihu.com/question/19555326" class="internal">怎样删除一个自己提出的问题?</a><br></li></ul><br>【关于话题】<br><ul><li><a href="http://www.zhihu.com/question/21544737" class="internal">为什么要给问题添加话题?</a></li><li><a href="http://www.zhihu.com/question/21544783" class="internal">如何给问题合理地添加话题? </a><br></li><li><a href="http://www.zhihu.com/question/19581435" class="internal">在知乎上添加话题有哪些规范?需要注意哪些? </a><br></li><li><a href="http://www.zhihu.com/question/19551643" class="internal">「话题」和「标签」有什么不同?</a></li><li><a href="http://www.zhihu.com/question/19581611" class="internal">什么是「话题经验」?如何添加话题经验?</a><br></li></ul><br>【关于回答】<ul><li><a href="http://www.zhihu.com/question/19550695" class="internal">在知乎上回答问题应该注意些什么?</a><br></li><li><a href="http://www.zhihu.com/question/19581512" class="internal">怎么正确使用知乎的「赞同、反对、感谢、没有帮助」功能?</a></li><li><a href="http://www.zhihu.com/question/20120168" class="internal">为什么知乎的部分回答会被折叠?折叠和「没有帮助」有什么关系?</a></li><li><a href="http://www.zhihu.com/question/20258015" class="internal">在知乎上进行转载或引用应该注意什么?</a></li><li>(新增)<a href="http://www.zhihu.com/question/20807001" class="internal">如何使用知乎的「禁止转载」功能?</a><br></li><li><a href="http://www.zhihu.com/question/20064580" class="internal">知乎上的图片使用规范有哪些?</a></li><li><a href="http://www.zhihu.com/question/20118966" class="internal">知乎上的视频使用规范有哪些?</a></li><li><a href="http://www.zhihu.com/question/19576738" class="internal">知乎如何对回答进行排序?</a><br></li></ul><br>【关于公共编辑】<br><ul><li><a href="http://www.zhihu.com/question/24501563" class="internal">如何参与知乎问题的公共编辑?</a></li><li><a href="http://www.zhihu.com/question/23261456/answer/24368082" class="internal">如何参与知乎话题的公共编辑?</a></li><li><a href="http://www.zhihu.com/question/20692213" class="internal">「公共编辑动态」是什么?如何使用?</a></li><li><a href="https://www.zhihu.com/question/52715250/answer/131710654" class="internal">如何申请话题索引的编辑权限? </a><br></li><li><a href="https://www.zhihu.com/question/52715142" class="internal">索引页面的公共编辑规范有哪些?</a><br></li></ul><br>【其他】<ul><li>用户名:<a href="http://www.zhihu.com/question/19551824" class="internal">在知乎上必须使用真实姓名吗?</a></li><li>企业用户:<a href="http://www.zhihu.com/question/19550235" class="internal">公司或组织可以注册知乎吗?</a><br></li><li>匿名:<a href="http://www.zhihu.com/question/19581541" class="internal">如何正确使用知乎上的「匿名身份」功能?</a><br></li><li>隐私:<a href="http://www.zhihu.com/question/19564411" class="internal">知乎如何处理用户隐私?</a></li><li>手机客户端:<a href="http://www.zhihu.com/question/19582972" class="internal">知乎有没有针对 iPhone、Android 等手机的客户端或 Wap 版?</a></li><li>(新增)禁言:<a href="http://www.zhihu.com/question/20893547" class="internal">什么是知乎禁言机制?哪些行为会导致被禁言?</a><br></li><li>举报:<a href="http://www.zhihu.com/question/20959801" class="internal">知乎举报功能如何使用?</a></li><li>限制数量:<a href="http://www.zhihu.com/question/21357427" class="internal">在知乎提问和答题每天有数量的限制了?具体规则是什么?</a><br></li><li>专栏:<a href="http://www.zhihu.com/question/30392735" class="internal">如何申请和使用知乎专栏?</a><a href="http://www.zhihu.com/question/30443555" class="internal">如何使用知乎专栏?</a></li></ul><br>以上内容正在不断修正中。</span><div class="ContentItem-time"><a href="/question/19581624/answer/95067673" target="_blank"><span data-tooltip="发布于 2016-04-13">编辑于 2016-12-01</span></a></div></div></div></div><div class="ContentItem-actions"><span><button class="VoteButton VoteButton--up" aria-label="赞同"><svg viewBox="0 0 20 18" class="Icon VoteButton-upIcon Icon--triangle" style="height:16px;width:9px;" width="9" height="16" aria-hidden="true"><title></title><g><path d="M0 15.243c0-.326.088-.533.236-.896l7.98-13.204C8.57.57 9.086 0 10 0s1.43.57 1.784 1.143l7.98 13.204c.15.363.236.57.236.896 0 1.386-.875 1.9-1.955 1.9H1.955c-1.08 0-1.955-.517-1.955-1.9z"/></g></svg>159</button><button class="VoteButton VoteButton--down" aria-label="反对"><svg viewBox="0 0 20 18" class="Icon VoteButton-downIcon Icon--triangle" style="height:16px;width:9px;" width="9" height="16" aria-hidden="true"><title></title><g><path d="M0 15.243c0-.326.088-.533.236-.896l7.98-13.204C8.57.57 9.086 0 10 0s1.43.57 1.784 1.143l7.98 13.204c.15.363.236.57.236.896 0 1.386-.875 1.9-1.955 1.9H1.955c-1.08 0-1.955-.517-1.955-1.9z"/></g></svg></button></span><button class="Button ContentItem-action Button--plain" type="button"><svg viewBox="0 0 18 18" class="Icon Icon--comment Icon--left" style="height:16px;width:12px;" width="12" height="16" aria-hidden="true"><title></title><g><path d="M7.24 16.313c-.272-.047-.553.026-.77.2-1.106.813-2.406 1.324-3.77 1.482-.16.017-.313-.06-.394-.197-.082-.136-.077-.308.012-.44.528-.656.906-1.42 1.11-2.237.04-.222-.046-.45-.226-.588C1.212 13.052.027 10.73 0 8.25 0 3.7 4.03 0 9 0s9 3.7 9 8.25-4.373 9.108-10.76 8.063z"/></g></svg>27 条评论</button><div class="Popover ShareMenu"><div id="Popover-73042-55363-toggle" aria-haspopup="true" aria-expanded="false" aria-owns="Popover-73042-55363-content"><button class="Button Button--plain" type="button"><svg viewBox="0 0 20 18" class="Icon Icon--share Icon--left" style="height:16px;width:13px;" width="13" height="16" aria-hidden="true"><title></title><g><path d="M.93 3.89C-.135 4.13-.343 5.56.614 6.098L5.89 9.005l8.168-4.776c.25-.128.477.197.273.388L7.05 10.66l.926 5.953c.18 1.084 1.593 1.376 2.182.456l9.644-15.243c.584-.892-.212-2.03-1.234-1.796L.93 3.89z"/></g></svg>分享</button></div></div><button class="Button ContentItem-action Button--plain" type="button"><svg viewBox="0 0 20 20" class="Icon Icon--star Icon--left" style="height:16px;width:13px;" width="13" height="16" aria-hidden="true"><title></title><g><path d="M3.515 17.64l.918-5.355-3.89-3.792c-.926-.902-.64-1.784.64-1.97L6.56 5.74 8.964.87c.572-1.16 1.5-1.16 2.072 0l2.404 4.87 5.377.783c1.28.186 1.566 1.068.64 1.97l-3.89 3.793.918 5.354c.22 1.274-.532 1.82-1.676 1.218L10 16.33l-4.808 2.528c-1.145.602-1.896.056-1.677-1.218z"/></g></svg>收藏</button><div class="Popover ContentItem-action"><button class="Button Button--plain" type="button" id="Popover-73043-1931-toggle" aria-haspopup="true" aria-expanded="false" aria-owns="Popover-73043-1931-content"><svg viewBox="0 0 18 4" class="Icon Icon--dots" style="height:16px;width:14px;" width="14" height="16" aria-hidden="true"><title></title><g><g><circle cx="2" cy="2" r="2"/><circle cx="9" cy="2" r="2"/><circle cx="16" cy="2" r="2"/></g></g></svg></button></div><button class="Button ContentItem-action ContentItem-rightButton Button--plain" type="button">收起<svg viewBox="0 0 10 6" class="Icon ContentItem-arrowIcon is-active Icon--arrow" style="height:16px;width:10px;" width="10" height="16" aria-hidden="true"><title></title><g><path d="M8.716.217L5.002 4 1.285.218C.99-.072.514-.072.22.218c-.294.29-.294.76 0 1.052l4.25 4.512c.292.29.77.29 1.063 0L9.78 1.27c.293-.29.293-.76 0-1.052-.295-.29-.77-.29-1.063 0z"/></g></svg></button></div></div></div></div></div></div></div><div class="CollapsedAnswers-bar"><button class="Button Button--plain" type="button">3 个回答被折叠</button><a class="Button Button--plain" type="button" href="/question/20120168">为什么?</a></div><div class="QuestionAnswers-answerTip">该问题目前已经被锁定,无法添加新答案。<a class="Button Button--plain" type="button" href="/question/19604313">问题为什么会被锁定?</a></div></div></div><div class="Question-sideColumn"><div></div></div></div></div></main></div></div><div id="data" style="display:none;" data-state="{&quot;loading&quot;:{&quot;global&quot;:{&quot;count&quot;:0},&quot;local&quot;:{&quot;token/&quot;:false,&quot;currentUser/get/&quot;:false,&quot;question/get/&quot;:false,&quot;question/getAnswers/19581624&quot;:false}},&quot;entities&quot;:{&quot;users&quot;:{&quot;bobby-14-18&quot;:{&quot;uid&quot;:810145535838281700,&quot;followNotificationsCount&quot;:0,&quot;userType&quot;:&quot;people&quot;,&quot;showSinaWeibo&quot;:false,&quot;accountStatus&quot;:[],&quot;isForceRenamed&quot;:false,&quot;id&quot;:&quot;bd0d13742b970572e151b5a31896e9fd&quot;,&quot;messagesCount&quot;:0,&quot;headline&quot;:&quot;程序员&quot;,&quot;visitsCount&quot;:5,&quot;isAdvertiser&quot;:false,&quot;isBindSina&quot;:false,&quot;favoritedCount&quot;:0,&quot;isOrg&quot;:false,&quot;followerCount&quot;:0,&quot;employments&quot;:[],&quot;articlesCount&quot;:0,&quot;type&quot;:&quot;people&quot;,&quot;caEnabled&quot;:false,&quot;avatarUrlTemplate&quot;:&quot;https://pic1.zhimg.com/da8e974dc_{size}.jpg&quot;,&quot;description&quot;:&quot;&quot;,&quot;avatarUrl&quot;:&quot;https://pic1.zhimg.com/da8e974dc_is.jpg&quot;,&quot;isActive&quot;:1485933747,&quot;answerCount&quot;:0,&quot;locations&quot;:[],&quot;coverUrl&quot;:&quot;&quot;,&quot;defaultNotificationsCount&quot;:0,&quot;educations&quot;:[],&quot;urlToken&quot;:&quot;bobby-14-18&quot;,&quot;canEditTopic&quot;:false,&quot;name&quot;:&quot;bobby&quot;,&quot;url&quot;:&quot;http://www.zhihu.com/api/v4/people/bd0d13742b970572e151b5a31896e9fd&quot;,&quot;badge&quot;:[],&quot;availableMessageTypes&quot;:[&quot;common&quot;],&quot;renamedFullname&quot;:&quot;&quot;,&quot;voteThankNotificationsCount&quot;:0,&quot;thankedCount&quot;:0,&quot;gender&quot;:-1,&quot;favoriteCount&quot;:0}},&quot;questions&quot;:{&quot;19581624&quot;:{&quot;status&quot;:{&quot;isLocked&quot;:true,&quot;isClose&quot;:false,&quot;isEvaluate&quot;:false,&quot;isSuggest&quot;:false},&quot;relationship&quot;:{&quot;concernedFollowers&quot;:[],&quot;isAnonymous&quot;:false,&quot;canLock&quot;:false,&quot;isFollowing&quot;:false,&quot;isAuthor&quot;:false,&quot;canCollapseAnswers&quot;:false,&quot;canStickAnswers&quot;:false},&quot;isMuted&quot;:false,&quot;topics&quot;:[{&quot;name&quot;:&quot;知乎指南&quot;,&quot;introduction&quot;:&quot;知乎产品使用指南,和知乎的社区规范。 &lt;br&gt;知乎官方指南的主要问题有哪些?&amp;nbsp;http://www.zhihu.com/question/19581624&quot;,&quot;excerpt&quot;:&quot;知乎产品使用指南,和知乎的社区规范。 知乎官方指南的主要问题有哪些? http://www.zhihu.com/question/19581624 &quot;,&quot;url&quot;:&quot;&quot;,&quot;avatarUrl&quot;:&quot;https://pic2.zhimg.com/772ba74f5_is.jpg&quot;,&quot;type&quot;:&quot;topic&quot;,&quot;id&quot;:&quot;19550235&quot;}],&quot;answerCount&quot;:1,&quot;isEditable&quot;:false,&quot;editableDetail&quot;:&quot;以下知乎官方指南中的全部问题,今后可能会有所调整!&quot;,&quot;visitCount&quot;:8511208,&quot;id&quot;:19581624,&quot;collapsedAnswerCount&quot;:3,&quot;author&quot;:{&quot;avatarUrlTemplate&quot;:&quot;https://pic2.zhimg.com/109fd876d_{size}.jpg&quot;,&quot;name&quot;:&quot;胡维&quot;,&quot;headline&quot;:&quot;知乎&quot;,&quot;type&quot;:&quot;people&quot;,&quot;userType&quot;:&quot;people&quot;,&quot;urlToken&quot;:&quot;whale&quot;,&quot;isAdvertiser&quot;:false,&quot;avatarUrl&quot;:&quot;https://pic2.zhimg.com/109fd876d_is.jpg&quot;,&quot;isFollowing&quot;:false,&quot;url&quot;:&quot;http://www.zhihu.com/api/v4/people/5caea235267e9cfb1ba9ccf7407909df&quot;,&quot;gender&quot;:1,&quot;badge&quot;:[],&quot;id&quot;:&quot;5caea235267e9cfb1ba9ccf7407909df&quot;,&quot;isOrg&quot;:false},&quot;url&quot;:&quot;http://www.zhihu.com/api/v4/questions/19581624&quot;,&quot;created&quot;:1301118908,&quot;detail&quot;:&quot;以下知乎官方指南中的全部问题,今后可能会有所调整!&quot;,&quot;updatedTime&quot;:1467686726,&quot;redirection&quot;:{&quot;from&quot;:[{&quot;created&quot;:1301118908,&quot;url&quot;:&quot;http://www.zhihu.com/api/v4/questions/19581624&quot;,&quot;title&quot;:&quot;属于「知乎官方指南」的问答有哪些?&quot;,&quot;updatedTime&quot;:1467686726,&quot;questionType&quot;:&quot;normal&quot;,&quot;type&quot;:&quot;question&quot;,&quot;id&quot;:19581624}]},&quot;commentCount&quot;:41,&quot;questionType&quot;:&quot;normal&quot;,&quot;followerCount&quot;:12487,&quot;title&quot;:&quot;属于「知乎官方指南」的问答有哪些?&quot;,&quot;canComment&quot;:{&quot;status&quot;:true,&quot;reason&quot;:&quot;&quot;},&quot;type&quot;:&quot;question&quot;,&quot;isNormal&quot;:true}},&quot;answers&quot;:{&quot;95067673&quot;:{&quot;editableContent&quot;:&quot;&lt;a href=\&quot;http://www.zhihu.com/question/20133162\&quot; class=\&quot;internal\&quot;&gt;知乎的社区基本原则是什么?&lt;/a&gt;&lt;br&gt;&lt;br&gt;【知乎入门】&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19550225\&quot; class=\&quot;internal\&quot;&gt;如何使用知乎?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19790711\&quot; class=\&quot;internal\&quot;&gt;在知乎不可以做哪些事?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;(新增)&lt;a href=\&quot;http://www.zhihu.com/question/20239684\&quot; class=\&quot;internal\&quot;&gt;在知乎上,什么是不友善内容?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;(新增)&lt;a href=\&quot;http://www.zhihu.com/question/24039476\&quot; class=\&quot;internal\&quot;&gt;知乎上的不友善内容会被怎样处理?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;(新增)&lt;a href=\&quot;http://www.zhihu.com/question/24039610\&quot; class=\&quot;internal\&quot;&gt;如果在知乎上发布了不友善内容,帐号可能会被怎样处理?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;【关于提问】&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19550238\&quot; class=\&quot;internal\&quot;&gt;为什么别人可以修改我在知乎上的提问?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19806261\&quot; class=\&quot;internal\&quot;&gt;知乎的提问规范有哪些?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/20414919\&quot; class=\&quot;internal\&quot;&gt;知乎的问题修改规范有哪些?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19567351\&quot; class=\&quot;internal\&quot;&gt;在知乎提的问题无人问津,有什么办法可以重新让人讨论这个问题?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19550701\&quot; class=\&quot;internal\&quot;&gt;知乎对于那些能直接通过 Google、维基百科等找到答案的问题是什么态度?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19570036\&quot; class=\&quot;internal\&quot;&gt;什么是「问题重定向」?如何正确使用该功能解决重复问题?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19550674\&quot; class=\&quot;internal\&quot;&gt;为什么说知乎的问题是公共资源而非个人所属?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19552850\&quot; class=\&quot;internal\&quot;&gt;为什么知乎鼓励让问题减少个人特色?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/21290061\&quot; class=\&quot;internal\&quot;&gt;为什么部分问题会被「关闭」「建议修改」?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19555326\&quot; class=\&quot;internal\&quot;&gt;怎样删除一个自己提出的问题?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;【关于话题】&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/21544737\&quot; class=\&quot;internal\&quot;&gt;为什么要给问题添加话题?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/21544783\&quot; class=\&quot;internal\&quot;&gt;如何给问题合理地添加话题? &lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19581435\&quot; class=\&quot;internal\&quot;&gt;在知乎上添加话题有哪些规范?需要注意哪些? &lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19551643\&quot; class=\&quot;internal\&quot;&gt;「话题」和「标签」有什么不同?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19581611\&quot; class=\&quot;internal\&quot;&gt;什么是「话题经验」?如何添加话题经验?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;【关于回答】&lt;ul&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19550695\&quot; class=\&quot;internal\&quot;&gt;在知乎上回答问题应该注意些什么?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19581512\&quot; class=\&quot;internal\&quot;&gt;怎么正确使用知乎的「赞同、反对、感谢、没有帮助」功能?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/20120168\&quot; class=\&quot;internal\&quot;&gt;为什么知乎的部分回答会被折叠?折叠和「没有帮助」有什么关系?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/20258015\&quot; class=\&quot;internal\&quot;&gt;在知乎上进行转载或引用应该注意什么?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;(新增)&lt;a href=\&quot;http://www.zhihu.com/question/20807001\&quot; class=\&quot;internal\&quot;&gt;如何使用知乎的「禁止转载」功能?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/20064580\&quot; class=\&quot;internal\&quot;&gt;知乎上的图片使用规范有哪些?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/20118966\&quot; class=\&quot;internal\&quot;&gt;知乎上的视频使用规范有哪些?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19576738\&quot; class=\&quot;internal\&quot;&gt;知乎如何对回答进行排序?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;【关于公共编辑】&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/24501563\&quot; class=\&quot;internal\&quot;&gt;如何参与知乎问题的公共编辑?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/23261456/answer/24368082\&quot; class=\&quot;internal\&quot;&gt;如何参与知乎话题的公共编辑?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/20692213\&quot; class=\&quot;internal\&quot;&gt;「公共编辑动态」是什么?如何使用?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;https://www.zhihu.com/question/52715250/answer/131710654\&quot; class=\&quot;internal\&quot;&gt;如何申请话题索引的编辑权限? &lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;https://www.zhihu.com/question/52715142\&quot; class=\&quot;internal\&quot;&gt;索引页面的公共编辑规范有哪些?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;【其他】&lt;ul&gt;&lt;li&gt;用户名:&lt;a href=\&quot;http://www.zhihu.com/question/19551824\&quot; class=\&quot;internal\&quot;&gt;在知乎上必须使用真实姓名吗?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;企业用户:&lt;a href=\&quot;http://www.zhihu.com/question/19550235\&quot; class=\&quot;internal\&quot;&gt;公司或组织可以注册知乎吗?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;匿名:&lt;a href=\&quot;http://www.zhihu.com/question/19581541\&quot; class=\&quot;internal\&quot;&gt;如何正确使用知乎上的「匿名身份」功能?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;隐私:&lt;a href=\&quot;http://www.zhihu.com/question/19564411\&quot; class=\&quot;internal\&quot;&gt;知乎如何处理用户隐私?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;手机客户端:&lt;a href=\&quot;http://www.zhihu.com/question/19582972\&quot; class=\&quot;internal\&quot;&gt;知乎有没有针对 iPhone、Android 等手机的客户端或 Wap 版?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;(新增)禁言:&lt;a href=\&quot;http://www.zhihu.com/question/20893547\&quot; class=\&quot;internal\&quot;&gt;什么是知乎禁言机制?哪些行为会导致被禁言?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;举报:&lt;a href=\&quot;http://www.zhihu.com/question/20959801\&quot; class=\&quot;internal\&quot;&gt;知乎举报功能如何使用?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;限制数量:&lt;a href=\&quot;http://www.zhihu.com/question/21357427\&quot; class=\&quot;internal\&quot;&gt;在知乎提问和答题每天有数量的限制了?具体规则是什么?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;专栏:&lt;a href=\&quot;http://www.zhihu.com/question/30392735\&quot; class=\&quot;internal\&quot;&gt;如何申请和使用知乎专栏?&lt;/a&gt;&lt;a href=\&quot;http://www.zhihu.com/question/30443555\&quot; class=\&quot;internal\&quot;&gt;如何使用知乎专栏?&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;以上内容正在不断修正中。&quot;,&quot;markInfos&quot;:[],&quot;excerpt&quot;:&quot;知乎的社区基本原则是什么? 【知乎入门】 如何使用知乎? 在知乎不可以做哪些事? (新增)在知乎上,什么是不友善内容? (新增)知乎上的不友善内容会被怎样处理? (新增)如果在知乎上发布了不友善内容,帐号可能会被怎样处理? 【关于提问】 为什么别人可以修改我在知乎上的提问? 知乎的提问规范有哪些? 知乎的问题修改规范有哪些? 在知乎提的问题无人问津,有什么办法可以重新让人讨论这个问题? 知乎对于那些能直接通过 … &quot;,&quot;thumbnail&quot;:&quot;&quot;,&quot;createdTime&quot;:1460525294,&quot;id&quot;:95067673,&quot;voteupCount&quot;:159,&quot;author&quot;:{&quot;isFollowed&quot;:false,&quot;avatarUrlTemplate&quot;:&quot;https://pic3.zhimg.com/34bf96bf5584ac4b5264bd7ed4fdbc5a_{size}.jpg&quot;,&quot;name&quot;:&quot;知乎小管家&quot;,&quot;avatarUrl&quot;:&quot;https://pic3.zhimg.com/34bf96bf5584ac4b5264bd7ed4fdbc5a_is.jpg&quot;,&quot;url&quot;:&quot;http://www.zhihu.com/api/v4/people/3d198a56310c02c4a83efb9f4a4c027e&quot;,&quot;gender&quot;:0,&quot;userType&quot;:&quot;people&quot;,&quot;urlToken&quot;:&quot;zhihuadmin&quot;,&quot;headline&quot;:&quot;欢迎反馈问题和建议!&quot;,&quot;messageThreadToken&quot;:&quot;6479654600&quot;,&quot;badge&quot;:[{&quot;type&quot;:&quot;identity&quot;,&quot;description&quot;:&quot;知乎官方帐号&quot;}],&quot;isOrg&quot;:false,&quot;isAdvertiser&quot;:false,&quot;isBlocking&quot;:false,&quot;isBlocked&quot;:false,&quot;type&quot;:&quot;people&quot;,&quot;id&quot;:&quot;3d198a56310c02c4a83efb9f4a4c027e&quot;},&quot;question&quot;:{&quot;created&quot;:1301118908,&quot;url&quot;:&quot;http://www.zhihu.com/api/v4/questions/19581624&quot;,&quot;title&quot;:&quot;属于「知乎官方指南」的问答有哪些?&quot;,&quot;updatedTime&quot;:1467686726,&quot;questionType&quot;:&quot;normal&quot;,&quot;type&quot;:&quot;question&quot;,&quot;id&quot;:19581624},&quot;content&quot;:&quot;&lt;a href=\&quot;http://www.zhihu.com/question/20133162\&quot; class=\&quot;internal\&quot;&gt;知乎的社区基本原则是什么?&lt;/a&gt;&lt;br&gt;&lt;br&gt;【知乎入门】&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19550225\&quot; class=\&quot;internal\&quot;&gt;如何使用知乎?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19790711\&quot; class=\&quot;internal\&quot;&gt;在知乎不可以做哪些事?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;(新增)&lt;a href=\&quot;http://www.zhihu.com/question/20239684\&quot; class=\&quot;internal\&quot;&gt;在知乎上,什么是不友善内容?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;(新增)&lt;a href=\&quot;http://www.zhihu.com/question/24039476\&quot; class=\&quot;internal\&quot;&gt;知乎上的不友善内容会被怎样处理?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;(新增)&lt;a href=\&quot;http://www.zhihu.com/question/24039610\&quot; class=\&quot;internal\&quot;&gt;如果在知乎上发布了不友善内容,帐号可能会被怎样处理?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;【关于提问】&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19550238\&quot; class=\&quot;internal\&quot;&gt;为什么别人可以修改我在知乎上的提问?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19806261\&quot; class=\&quot;internal\&quot;&gt;知乎的提问规范有哪些?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/20414919\&quot; class=\&quot;internal\&quot;&gt;知乎的问题修改规范有哪些?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19567351\&quot; class=\&quot;internal\&quot;&gt;在知乎提的问题无人问津,有什么办法可以重新让人讨论这个问题?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19550701\&quot; class=\&quot;internal\&quot;&gt;知乎对于那些能直接通过 Google、维基百科等找到答案的问题是什么态度?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19570036\&quot; class=\&quot;internal\&quot;&gt;什么是「问题重定向」?如何正确使用该功能解决重复问题?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19550674\&quot; class=\&quot;internal\&quot;&gt;为什么说知乎的问题是公共资源而非个人所属?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19552850\&quot; class=\&quot;internal\&quot;&gt;为什么知乎鼓励让问题减少个人特色?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/21290061\&quot; class=\&quot;internal\&quot;&gt;为什么部分问题会被「关闭」「建议修改」?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19555326\&quot; class=\&quot;internal\&quot;&gt;怎样删除一个自己提出的问题?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;【关于话题】&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/21544737\&quot; class=\&quot;internal\&quot;&gt;为什么要给问题添加话题?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/21544783\&quot; class=\&quot;internal\&quot;&gt;如何给问题合理地添加话题? &lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19581435\&quot; class=\&quot;internal\&quot;&gt;在知乎上添加话题有哪些规范?需要注意哪些? &lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19551643\&quot; class=\&quot;internal\&quot;&gt;「话题」和「标签」有什么不同?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19581611\&quot; class=\&quot;internal\&quot;&gt;什么是「话题经验」?如何添加话题经验?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;【关于回答】&lt;ul&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19550695\&quot; class=\&quot;internal\&quot;&gt;在知乎上回答问题应该注意些什么?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19581512\&quot; class=\&quot;internal\&quot;&gt;怎么正确使用知乎的「赞同、反对、感谢、没有帮助」功能?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/20120168\&quot; class=\&quot;internal\&quot;&gt;为什么知乎的部分回答会被折叠?折叠和「没有帮助」有什么关系?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/20258015\&quot; class=\&quot;internal\&quot;&gt;在知乎上进行转载或引用应该注意什么?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;(新增)&lt;a href=\&quot;http://www.zhihu.com/question/20807001\&quot; class=\&quot;internal\&quot;&gt;如何使用知乎的「禁止转载」功能?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/20064580\&quot; class=\&quot;internal\&quot;&gt;知乎上的图片使用规范有哪些?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/20118966\&quot; class=\&quot;internal\&quot;&gt;知乎上的视频使用规范有哪些?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/19576738\&quot; class=\&quot;internal\&quot;&gt;知乎如何对回答进行排序?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;【关于公共编辑】&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/24501563\&quot; class=\&quot;internal\&quot;&gt;如何参与知乎问题的公共编辑?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/23261456/answer/24368082\&quot; class=\&quot;internal\&quot;&gt;如何参与知乎话题的公共编辑?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;http://www.zhihu.com/question/20692213\&quot; class=\&quot;internal\&quot;&gt;「公共编辑动态」是什么?如何使用?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;https://www.zhihu.com/question/52715250/answer/131710654\&quot; class=\&quot;internal\&quot;&gt;如何申请话题索引的编辑权限? &lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=\&quot;https://www.zhihu.com/question/52715142\&quot; class=\&quot;internal\&quot;&gt;索引页面的公共编辑规范有哪些?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;【其他】&lt;ul&gt;&lt;li&gt;用户名:&lt;a href=\&quot;http://www.zhihu.com/question/19551824\&quot; class=\&quot;internal\&quot;&gt;在知乎上必须使用真实姓名吗?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;企业用户:&lt;a href=\&quot;http://www.zhihu.com/question/19550235\&quot; class=\&quot;internal\&quot;&gt;公司或组织可以注册知乎吗?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;匿名:&lt;a href=\&quot;http://www.zhihu.com/question/19581541\&quot; class=\&quot;internal\&quot;&gt;如何正确使用知乎上的「匿名身份」功能?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;隐私:&lt;a href=\&quot;http://www.zhihu.com/question/19564411\&quot; class=\&quot;internal\&quot;&gt;知乎如何处理用户隐私?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;手机客户端:&lt;a href=\&quot;http://www.zhihu.com/question/19582972\&quot; class=\&quot;internal\&quot;&gt;知乎有没有针对 iPhone、Android 等手机的客户端或 Wap 版?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;(新增)禁言:&lt;a href=\&quot;http://www.zhihu.com/question/20893547\&quot; class=\&quot;internal\&quot;&gt;什么是知乎禁言机制?哪些行为会导致被禁言?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;举报:&lt;a href=\&quot;http://www.zhihu.com/question/20959801\&quot; class=\&quot;internal\&quot;&gt;知乎举报功能如何使用?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;限制数量:&lt;a href=\&quot;http://www.zhihu.com/question/21357427\&quot; class=\&quot;internal\&quot;&gt;在知乎提问和答题每天有数量的限制了?具体规则是什么?&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;专栏:&lt;a href=\&quot;http://www.zhihu.com/question/30392735\&quot; class=\&quot;internal\&quot;&gt;如何申请和使用知乎专栏?&lt;/a&gt;&lt;a href=\&quot;http://www.zhihu.com/question/30443555\&quot; class=\&quot;internal\&quot;&gt;如何使用知乎专栏?&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;以上内容正在不断修正中。&quot;,&quot;reviewingCommentsCount&quot;:0,&quot;commentCount&quot;:27,&quot;reshipmentSettings&quot;:&quot;allowed&quot;,&quot;type&quot;:&quot;answer&quot;,&quot;suggestEdit&quot;:{&quot;status&quot;:false,&quot;title&quot;:&quot;&quot;,&quot;url&quot;:&quot;&quot;,&quot;tip&quot;:&quot;&quot;,&quot;reason&quot;:&quot;&quot;,&quot;unnormalDetails&quot;:null},&quot;relationship&quot;:{&quot;upvotedFollowees&quot;:[],&quot;isAuthor&quot;:false,&quot;isThanked&quot;:false,&quot;isNothelp&quot;:false,&quot;voting&quot;:0},&quot;collapsedCounts&quot;:0,&quot;collapsedBy&quot;:&quot;nobody&quot;,&quot;isCopyable&quot;:true,&quot;isCollapsed&quot;:false,&quot;url&quot;:&quot;http://www.zhihu.com/api/v4/answers/95067673&quot;,&quot;commentPermission&quot;:&quot;all&quot;,&quot;isSticky&quot;:null,&quot;updatedTime&quot;:1480569461,&quot;extras&quot;:&quot;&quot;,&quot;canComment&quot;:{&quot;status&quot;:true,&quot;reason&quot;:&quot;&quot;},&quot;isNormal&quot;:true}},&quot;articles&quot;:{},&quot;columns&quot;:{},&quot;topics&quot;:{},&quot;roundtables&quot;:{},&quot;favlists&quot;:{},&quot;comments&quot;:{},&quot;notifications&quot;:{},&quot;publications&quot;:{}},&quot;people&quot;:{&quot;isFetching&quot;:false,&quot;activitiesByUser&quot;:{},&quot;answersByUser&quot;:{},&quot;answersSortByVotesByUser&quot;:{},&quot;answersMarkedByUser&quot;:{},&quot;votedAnswersByUser&quot;:{},&quot;thankedAnswersByUser&quot;:{},&quot;voteAnswersByUser&quot;:{},&quot;thankAnswersByUser&quot;:{},&quot;topicAnswersByUser&quot;:{},&quot;articlesByUser&quot;:{},&quot;articlesSortByVotesByUser&quot;:{},&quot;pinsByUser&quot;:{},&quot;questionsByUser&quot;:{},&quot;commercialQuestionsByUser&quot;:{},&quot;favlistsByUser&quot;:{},&quot;followingByUser&quot;:{},&quot;followersByUser&quot;:{},&quot;mutualsByUser&quot;:{},&quot;followingColumnsByUser&quot;:{},&quot;followingQuestionsByUser&quot;:{},&quot;followingFavlistsByUser&quot;:{},&quot;followingTopicsByUser&quot;:{},&quot;publicationsByUser&quot;:{},&quot;columnsByUser&quot;:{},&quot;allFavlistsByUser&quot;:{}},&quot;question&quot;:{&quot;followers&quot;:{},&quot;answers&quot;:{&quot;19581624&quot;:{&quot;isFetching&quot;:false,&quot;isDrained&quot;:true,&quot;ids&quot;:[95067673],&quot;totals&quot;:1,&quot;isPrevDrained&quot;:true,&quot;previous&quot;:&quot;http://www.zhihu.com/api/v4/questions/19581624/answers?sort_by=default&amp;include=data%5B%2A%5D.is_normal%2Cis_sticky%2Ccollapsed_by%2Csuggest_edit%2Ccomment_count%2Ccollapsed_counts%2Creviewing_comments_count%2Ccan_comment%2Ccontent%2Ceditable_content%2Cvoteup_count%2Creshipment_settings%2Ccomment_permission%2Cmark_infos%2Ccreated_time%2Cupdated_time%2Crelationship.is_author%2Cvoting%2Cis_thanked%2Cis_nothelp%2Cupvoted_followees%3Bdata%5B%2A%5D.author.is_blocking%2Cis_blocked%2Cis_followed%2Cvoteup_count%2Cmessage_thread_token%2Cbadge%5B%3F%28type%3Dbest_answerer%29%5D.topics&amp;limit=3&amp;offset=0&quot;,&quot;next&quot;:&quot;http://www.zhihu.com/api/v4/questions/19581624/answers?sort_by=default&amp;include=data%5B%2A%5D.is_normal%2Cis_sticky%2Ccollapsed_by%2Csuggest_edit%2Ccomment_count%2Ccollapsed_counts%2Creviewing_comments_count%2Ccan_comment%2Ccontent%2Ceditable_content%2Cvoteup_count%2Creshipment_settings%2Ccomment_permission%2Cmark_infos%2Ccreated_time%2Cupdated_time%2Crelationship.is_author%2Cvoting%2Cis_thanked%2Cis_nothelp%2Cupvoted_followees%3Bdata%5B%2A%5D.author.is_blocking%2Cis_blocked%2Cis_followed%2Cvoteup_count%2Cmessage_thread_token%2Cbadge%5B%3F%28type%3Dbest_answerer%29%5D.topics&amp;limit=3&amp;offset=3&quot;}},&quot;createdAnswers&quot;:{},&quot;collapsedAnswers&quot;:{},&quot;notificationAnswers&quot;:{},&quot;invitationCandidates&quot;:{},&quot;inviters&quot;:{},&quot;invitees&quot;:{},&quot;similarQuestions&quot;:{},&quot;relatedLives&quot;:{},&quot;bio&quot;:{},&quot;brand&quot;:{}},&quot;comments&quot;:{&quot;pagination&quot;:{},&quot;reverse&quot;:{},&quot;reviewing&quot;:{},&quot;conversation&quot;:{}},&quot;currentUser&quot;:&quot;bobby-14-18&quot;,&quot;shareTexts&quot;:{},&quot;pushNotifications&quot;:{&quot;default&quot;:{&quot;isFetching&quot;:false,&quot;isDrained&quot;:false,&quot;ids&quot;:[]},&quot;follow&quot;:{&quot;isFetching&quot;:false,&quot;isDrained&quot;:false,&quot;ids&quot;:[]},&quot;vote-thank&quot;:{&quot;isFetching&quot;:false,&quot;isDrained&quot;:false,&quot;ids&quot;:[]},&quot;currentTab&quot;:&quot;default&quot;,&quot;notificationsCount&quot;:{&quot;default&quot;:0,&quot;follow&quot;:0,&quot;vote-thank&quot;:0}},&quot;messages&quot;:{&quot;data&quot;:{},&quot;currentTab&quot;:&quot;common&quot;,&quot;messageCount&quot;:0},&quot;notification&quot;:{},&quot;token&quot;:{&quot;carCompose&quot;:&quot;QUdBQ2tCSTNQZ3NYQUFBQVlRSlZUVXlEMmxnMDJZaHVkdjJQT1pJeEMtV213aEtFUUh2RUZ3PT0=|1488123471|9b8e05f643d4e1528322770c44518f9a3d0891b9&quot;,&quot;xUDID&quot;:&quot;ABCCJTbYXguPTlhA2KF3y1imFiI1pkKUin4=&quot;},&quot;upload&quot;:{},&quot;answers&quot;:{&quot;voters&quot;:{},&quot;copyrightApplicants&quot;:{},&quot;favlists&quot;:{}},&quot;banner&quot;:{},&quot;captcha&quot;:{&quot;captchaNeeded&quot;:false,&quot;captchaBase64String&quot;:null,&quot;captchaValidationMessage&quot;:null,&quot;loginCaptchaExpires&quot;:false},&quot;topics&quot;:{&quot;bios&quot;:{}},&quot;sms&quot;:{&quot;supportedCountries&quot;:[]},&quot;register&quot;:{&quot;registerValidateSucceeded&quot;:null,&quot;registerValidateErrors&quot;:{},&quot;registerConfirmError&quot;:null,&quot;sendDigitsError&quot;:null,&quot;registerConfirmSucceeded&quot;:null},&quot;login&quot;:{&quot;loginConfirmError&quot;:null,&quot;sendDigitsError&quot;:null,&quot;loginConfirmSucceeded&quot;:null},&quot;active&quot;:{&quot;sendDigitsError&quot;:null,&quot;activeConfirmSucceeded&quot;:null,&quot;activeConfirmError&quot;:null},&quot;passwordReset&quot;:{&quot;loginConfirmError&quot;:null,&quot;sendDigitsError&quot;:null,&quot;loginConfirmSucceeded&quot;:null,&quot;resetPasswordSucceeded&quot;:null,&quot;resetPasswordError&quot;:null},&quot;explore&quot;:{&quot;recommendations&quot;:{}},&quot;articles&quot;:{&quot;voters&quot;:{}},&quot;favlists&quot;:{&quot;relations&quot;:{}},&quot;pins&quot;:{&quot;voters&quot;:{}},&quot;settings&quot;:{&quot;experiment&quot;:{&quot;default&quot;:&quot;None&quot;,&quot;ge3&quot;:&quot;ge3_9&quot;,&quot;new_more&quot;:&quot;old&quot;}}}" data-config="{&quot;apiAddress&quot;:&quot;https://www.zhihu.com/api/v4/&quot;,&quot;filterPrefixArray&quot;:[&quot;v3&quot;],&quot;deployEnv&quot;:&quot;production&quot;}" data-reactid="20"></div><script src="https://static.zhihu.com/heifetz/vendor.3acf80159dd6a4c34062.js" data-reactid="21"></script><script src="https://static.zhihu.com/heifetz/main.raven.3ca24707992fda54d934.js" async="" data-reactid="22"></script><script src="https://static.zhihu.com/heifetz/main.app.40ef4355ca476ca18a3f.js" data-reactid="23"></script></body></html>
\ No newline at end of file
asn1crypto==0.23.0
attrs==17.3.0
Automat==0.6.0
certifi==2017.11.5
cffi==1.11.2
chardet==3.0.4
constantly==15.1.0
cryptography==2.1.3
cssselect==1.0.1
elasticsearch==6.0.0
enum34==1.1.6
hyperlink==17.3.1
idna==2.6
incremental==17.5.0
ipaddress==1.0.18
lxml==4.1.1
mysqlclient==1.3.12
olefile==0.44
parsel==1.2.0
Pillow==4.3.0
pyasn1==0.3.7
pyasn1-modules==0.1.5
pycparser==2.18
PyDispatcher==2.0.5
pyOpenSSL==17.3.0
queuelib==1.4.2
requests==2.18.4
Scrapy==1.4.0
service-identity==17.0.0
six==1.11.0
Twisted==17.9.0
urllib3==1.22
w3lib==1.18.0
zope.interface==4.4.3
# Automatically created by: scrapy startproject
#
# For more information about the [deploy] section see:
# https://scrapyd.readthedocs.org/en/latest/deploy.html
[settings]
default = ArticleSpider.settings
# shell = bpython
[deploy:bobby]
url = http://localhost:6800/
project = ArticleSpider
# Automatically created by: scrapyd-deploy
from setuptools import setup, find_packages
setup(
name = 'project',
version = '1.0',
packages = find_packages(),
entry_points = {'scrapy': ['settings = ArticleSpider.settings']},
)
# -*- coding: utf-8 -*-
__author__ = 'bobby'
import redis
redis_cli = redis.StrictRedis()
redis_cli.incr("jobbole_count")
# -*- coding: utf-8 -*-
__author__ = 'bobby'
# -*- coding: utf-8 -*-
__author__ = 'bobby'
import requests
from scrapy.selector import Selector
import MySQLdb
conn = MySQLdb.connect(host="127.0.0.1", user="root", passwd="root", db="article_spider", charset="utf8")
cursor = conn.cursor()
def crawl_ips():
#爬取西刺的免费ip代理
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0"}
for i in range(1568):
re = requests.get("http://www.xicidaili.com/nn/{0}".format(i), headers=headers)
selector = Selector(text=re.text)
all_trs = selector.css("#ip_list tr")
ip_list = []
for tr in all_trs[1:]:
speed_str = tr.css(".bar::attr(title)").extract()[0]
if speed_str:
speed = float(speed_str.split("秒")[0])
all_texts = tr.css("td::text").extract()
ip = all_texts[0]
port = all_texts[1]
proxy_type = all_texts[5]
ip_list.append((ip, port, proxy_type, speed))
for ip_info in ip_list:
cursor.execute(
"insert proxy_ip(ip, port, speed, proxy_type) VALUES('{0}', '{1}', {2}, 'HTTP')".format(
ip_info[0], ip_info[1], ip_info[3]
)
)
conn.commit()
class GetIP(object):
def delete_ip(self, ip):
#从数据库中删除无效的ip
delete_sql = """
delete from proxy_ip where ip='{0}'
""".format(ip)
cursor.execute(delete_sql)
conn.commit()
return True
def judge_ip(self, ip, port):
#判断ip是否可用
http_url = "http://www.baidu.com"
proxy_url = "http://{0}:{1}".format(ip, port)
try:
proxy_dict = {
"http":proxy_url,
}
response = requests.get(http_url, proxies=proxy_dict)
except Exception as e:
print ("invalid ip and port")
self.delete_ip(ip)
return False
else:
code = response.status_code
if code >= 200 and code < 300:
print ("effective ip")
return True
else:
print ("invalid ip and port")
self.delete_ip(ip)
return False
def get_random_ip(self):
#从数据库中随机获取一个可用的ip
random_sql = """
SELECT ip, port FROM proxy_ip
ORDER BY RAND()
LIMIT 1
"""
result = cursor.execute(random_sql)
for ip_info in cursor.fetchall():
ip = ip_info[0]
port = ip_info[1]
judge_re = self.judge_ip(ip, port)
if judge_re:
return "http://{0}:{1}".format(ip, port)
else:
return self.get_random_ip()
# print (crawl_ips())
if __name__ == "__main__":
get_ip = GetIP()
get_ip.get_random_ip()
\ No newline at end of file
# -*- coding: utf-8 -*-
__author__ = 'bobby'
from selenium import webdriver
from scrapy.selector import Selector
# browser = webdriver.Chrome(executable_path="D:/Temp/chromedriver.exe")
# browser.get("https://www.zhihu.com/#signin")
#
# browser.find_element_by_css_selector(".view-signin input[name='account']").send_keys("18782902568")
# browser.find_element_by_css_selector(".view-signin input[name='password']").send_keys("admin125")
#
# browser.find_element_by_css_selector(".view-signin button.sign-button").click()
#selenium 完成微博模拟登录
# browser.get("https://www.oschina.net/blog")
# import time
# time.sleep(5)
# browser.find_element_by_css_selector("#loginname").send_keys("liyao198705@sina.com")
# browser.find_element_by_css_selector(".info_list.password input[node-type='password']").send_keys("da_ge_da")
# browser.find_element_by_css_selector(".info_list.login_btn a[node-type='submitBtn']").click()
# for i in range(3):
# browser.execute_script("window.scrollTo(0, document.body.scrollHeight); var lenOfPage=document.body.scrollHeight; return lenOfPage;")
# time.sleep(3)
# t_selector = Selector(text=browser.page_source)
# print (t_selector.css(".tm-promo-price .tm-price::text").extract())
#设置chromedriver不加载图片
# chrome_opt = webdriver.ChromeOptions()
# prefs = {"profile.managed_default_content_settings.images":2}
# chrome_opt.add_experimental_option("prefs", prefs)
#phantomjs, 无界面的浏览器, 多进程情况下phantomjs性能会下降很严重
browser = webdriver.PhantomJS(executable_path="E:/home/phantomjs-2.1.1-windows/bin/phantomjs.exe")
browser.get("https://detail.tmall.com/item.htm?spm=a230r.1.14.3.yYBVG6&id=538286972599&cm_id=140105335569ed55e27b&abbucket=15&sku_properties=10004:709990523;5919063:6536025")
print (browser.page_source)
browser.quit()
\ No newline at end of file
# -*- coding: utf-8 -*-
__author__ = 'bobby'
import json
import requests
class YDMHttp(object):
apiurl = 'http://api.yundama.com/api.php'
username = ''
password = ''
appid = ''
appkey = ''
def __init__(self, username, password, appid, appkey):
self.username = username
self.password = password
self.appid = str(appid)
self.appkey = appkey
def balance(self):
data = {'method': 'balance', 'username': self.username, 'password': self.password, 'appid': self.appid, 'appkey': self.appkey}
response_data = requests.post(self.apiurl, data=data)
ret_data = json.loads(response_data.text)
if ret_data["ret"] == 0:
print ("获取剩余积分", ret_data["balance"])
return ret_data["balance"]
else:
return None
def login(self):
data = {'method': 'login', 'username': self.username, 'password': self.password, 'appid': self.appid, 'appkey': self.appkey}
response_data = requests.post(self.apiurl, data=data)
ret_data = json.loads(response_data.text)
if ret_data["ret"] == 0:
print ("登录成功", ret_data["uid"])
return ret_data["uid"]
else:
return None
def decode(self, filename, codetype, timeout):
data = {'method': 'upload', 'username': self.username, 'password': self.password, 'appid': self.appid, 'appkey': self.appkey, 'codetype': str(codetype), 'timeout': str(timeout)}
files = {'file': open(filename, 'rb')}
response_data = requests.post(self.apiurl, files=files, data=data)
ret_data = json.loads(response_data.text)
if ret_data["ret"] == 0:
print ("识别成功", ret_data["text"])
return ret_data["text"]
else:
return None
def ydm(file_path):
username = 'da_ge_da1'
# 密码
password = 'da_ge_da'
# 软件ID,开发者分成必要参数。登录开发者后台【我的软件】获得!
appid = 3129
# 软件密钥,开发者分成必要参数。登录开发者后台【我的软件】获得!
appkey = '40d5ad41c047179fc797631e3b9c3025'
# 图片文件
filename = 'image/captcha.jpg'
# 验证码类型,# 例:1004表示4位字母数字,不同类型收费不同。请准确填写,否则影响识别率。在此查询所有类型 http://www.yundama.com/price.html
codetype = 5000
# 超时时间,秒
timeout = 60
# 检查
yundama = YDMHttp(username, password, appid, appkey)
if (username == 'username'):
print('请设置好相关参数再测试')
else:
# 开始识别,图片路径,验证码类型ID,超时时间(秒),识别结果
return yundama.decode(file_path, codetype, timeout);
if __name__ == "__main__":
# 用户名
username = 'da_ge_da1'
# 密码
password = 'da_ge_da'
# 软件ID,开发者分成必要参数。登录开发者后台【我的软件】获得!
appid = 3129
# 软件密钥,开发者分成必要参数。登录开发者后台【我的软件】获得!
appkey = '40d5ad41c047179fc797631e3b9c3025'
# 图片文件
filename = 'image/captcha.jpg'
# 验证码类型,# 例:1004表示4位字母数字,不同类型收费不同。请准确填写,否则影响识别率。在此查询所有类型 http://www.yundama.com/price.html
codetype = 5000
# 超时时间,秒
timeout = 60
# 检查
if (username == 'username'):
print ('请设置好相关参数再测试')
else:
# 初始化
yundama = YDMHttp(username, password, appid, appkey)
# 登陆云打码
uid = yundama.login();
print('uid: %s' % uid)
# 登陆云打码
uid = yundama.login();
print ('uid: %s' % uid)
# 查询余额
balance = yundama.balance();
print ('balance: %s' % balance)
# 开始识别,图片路径,验证码类型ID,超时时间(秒),识别结果
text = yundama.decode(filename, codetype, timeout);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment