Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
CSDN 技术社区
CSDN 统一标签设计
提交
47043122
C
CSDN 统一标签设计
项目概览
CSDN 技术社区
/
CSDN 统一标签设计
通知
1649
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看板
提交
47043122
编写于
4月 20, 2021
作者:
F
feilong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
添加segmentfault标签数据集
上级
da71c24f
变更
3
展开全部
隐藏空白更改
内联
并排
Showing
3 changed file
with
13153 addition
and
0 deletion
+13153
-0
src/dataset/segmentfault.tag.json
src/dataset/segmentfault.tag.json
+13076
-0
src/main.py
src/main.py
+3
-0
src/tag_source/segmentfault.py
src/tag_source/segmentfault.py
+74
-0
未找到文件。
src/dataset/segmentfault.tag.json
0 → 100644
浏览文件 @
47043122
此差异已折叠。
点击以展开。
src/main.py
浏览文件 @
47043122
import
click
import
tag_source.vscode
import
tag_source.stackoverflow
import
tag_source.segmentfault
@
click
.
command
()
@
click
.
option
(
'--source'
)
...
...
@@ -10,6 +11,8 @@ def fetch(source):
tag_source
.
vscode
.
fetch
()
elif
source
==
'so'
:
tag_source
.
stackoverflow
.
fetch
()
elif
source
==
'sf'
:
tag_source
.
segmentfault
.
fetch
()
if
__name__
==
'__main__'
:
fetch
()
\ No newline at end of file
src/tag_source/segmentfault.py
0 → 100644
浏览文件 @
47043122
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
SegmentFaultTagSpider
(
scrapy
.
Spider
):
name
=
"segmentfault_tags"
allowed_domains
=
[
"segmentfault.com"
]
start_urls
=
[
'https://segmentfault.com/tags/all?page=1'
]
custom_settings
=
{
'ITEM_PIPELINES'
:{
'tag_source.segmentfault.TagPipeline'
:
301
},
'LOG_LEVEL'
:
'INFO'
}
def
__init__
(
self
):
self
.
page_count
=
0
self
.
totgal_pages
=
654
def
parse
(
self
,
response
):
self
.
page_count
+=
1
tags
=
response
.
css
(
'.widget-tag'
)
for
tag
in
tags
:
name
=
tag
.
xpath
(
'h2/a/text()'
).
get
()
desc
=
tag
.
xpath
(
'p/text()'
).
get
()
star
=
tag
.
xpath
(
'div/strong/text()'
).
get
()
yield
{
'name'
:
name
,
'desc'
:
desc
,
'star'
:
star
}
next_page_list
=
response
.
css
(
'.next'
)
if
len
(
next_page_list
)
>
0
:
next_page_item
=
next_page_list
[
len
(
next_page_list
)
-
1
]
next_page
=
next_page_item
.
css
(
'a::attr(href)'
).
get
()
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/segmentfault.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
(
SegmentFaultTagSpider
)
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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录