Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
CSDN 技术社区
CSDN 统一标签设计
提交
0d9bb4db
C
CSDN 统一标签设计
项目概览
CSDN 技术社区
/
CSDN 统一标签设计
通知
1653
Star
104
Fork
104
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
9
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
4
Wiki
分析
仓库
DevOps
项目成员
Pages
C
CSDN 统一标签设计
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
9
Issue
9
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
4
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
0d9bb4db
编写于
4月 21, 2021
作者:
F
feilong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
添加OSChina的标签集
上级
c0719574
变更
3
展开全部
隐藏空白更改
内联
并排
Showing
3 changed file
with
8007 addition
and
10 deletion
+8007
-10
src/dataset/oschina.tag.json
src/dataset/oschina.tag.json
+7917
-0
src/main.py
src/main.py
+16
-10
src/tag_source/oschina.py
src/tag_source/oschina.py
+74
-0
未找到文件。
src/dataset/oschina.tag.json
0 → 100644
浏览文件 @
0d9bb4db
此差异已折叠。
点击以展开。
src/main.py
浏览文件 @
0d9bb4db
...
...
@@ -4,21 +4,27 @@ import tag_source.stackoverflow
import
tag_source.segmentfault
import
tag_source.infoq
import
tag_source.cnblogs
import
tag_source.oschina
@
click
.
command
()
@
click
.
option
(
'--source'
)
def
fetch
(
source
):
click
.
echo
(
'will fetch tags from %s!'
%
source
)
if
source
==
'vscode'
:
tag_source
.
vscode
.
fetch
()
elif
source
==
'so'
:
tag_source
.
stackoverflow
.
fetch
()
elif
source
==
'sf'
:
tag_source
.
segmentfault
.
fetch
()
elif
source
==
'infoq'
:
tag_source
.
infoq
.
fetch
()
elif
source
==
'cnblogs'
:
tag_source
.
cnblogs
.
fetch
()
sources
=
{
'vscode'
:
lambda
:
tag_source
.
vscode
.
fetch
(),
'so'
:
lambda
:
tag_source
.
stackoverflow
.
fetch
(),
'sf'
:
lambda
:
tag_source
.
segmentfault
.
fetch
(),
'infoq'
:
lambda
:
tag_source
.
infoq
.
fetch
(),
'cnblogs'
:
lambda
:
tag_source
.
cnblogs
.
fetch
(),
'oschina'
:
lambda
:
tag_source
.
oschina
.
fetch
(),
}
action
=
sources
.
get
(
source
)
if
action
is
not
None
:
action
()
else
:
print
(
'source {} is not support now.'
.
format
(
source
))
if
__name__
==
'__main__'
:
fetch
()
\ No newline at end of file
src/tag_source/oschina.py
0 → 100644
浏览文件 @
0d9bb4db
import
os
import
json
import
urllib.request
from
scrapy.selector
import
Selector
from
scrapy.http
import
HtmlResponse
import
scrapy
from
scrapy.crawler
import
CrawlerProcess
from
scrapy.settings
import
Settings
class
OSChinaTagSpider
(
scrapy
.
Spider
):
name
=
"oschina_tags"
allowed_domains
=
[
"oschina.net"
]
start_urls
=
[
'https://www.oschina.net/question/tags?p=1'
]
custom_settings
=
{
'ITEM_PIPELINES'
:{
'tag_source.oschina.TagPipeline'
:
301
},
'LOG_LEVEL'
:
'INFO'
}
def
__init__
(
self
):
self
.
page_count
=
0
self
.
totgal_pages
=
606
def
parse
(
self
,
response
):
self
.
page_count
+=
1
tags
=
response
.
css
(
'.tag-card'
)
for
tag
in
tags
:
content
=
tag
.
css
(
'.content'
)
name
=
content
.
css
(
'.header::text'
).
get
()
star
=
int
(
content
.
css
(
'.meta::text'
).
get
().
replace
(
' 个问答'
,
''
))
desc
=
content
.
css
(
'.description::text'
).
get
()
yield
{
'name'
:
name
,
'star'
:
star
,
'desc'
:
desc
}
if
self
.
page_count
<
self
.
totgal_pages
:
next_page
=
response
.
css
(
'.next-item::attr(href)'
).
get
()
if
next_page
is
not
None
:
print
(
'next_page:'
,
next_page
)
yield
response
.
follow
(
next_page
,
callback
=
self
.
parse
,
dont_filter
=
True
)
class
TagPipeline
(
object
):
def
open_spider
(
self
,
spider
):
self
.
file
=
open
(
'dataset/oschina.tag.json'
,
'w'
)
self
.
file
.
write
(
'[
\n
'
)
self
.
count
=
0
self
.
tags
=
{}
def
close_spider
(
self
,
spider
):
self
.
file
.
write
(
'
\n
]'
)
self
.
file
.
close
()
def
process_item
(
self
,
item
,
spider
):
if
self
.
tags
.
get
(
item
[
'name'
])
is
not
None
:
return
self
.
tags
[
item
[
'name'
]]
=
True
words
=
[]
if
self
.
count
>
0
:
words
.
append
(
',
\n
'
)
words
.
append
(
' '
)
words
.
append
(
json
.
dumps
(
item
,
ensure_ascii
=
False
).
strip
())
line
=
''
.
join
(
words
)
self
.
file
.
write
(
line
)
self
.
count
+=
1
def
fetch
():
settings
=
Settings
()
process
=
CrawlerProcess
()
process
.
crawl
(
OSChinaTagSpider
)
process
.
start
()
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录