Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
茵可露露
Python 爬虫120例
提交
ba21aa3f
Python 爬虫120例
项目概览
茵可露露
/
Python 爬虫120例
与 Fork 源项目一致
Fork自
梦想橡皮擦 / Python 爬虫120例
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Python 爬虫120例
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
ba21aa3f
编写于
6月 06, 2021
作者:
梦想橡皮擦
💬
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
千猫图
上级
485609be
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
95 addition
and
0 deletion
+95
-0
NO3/third.py
NO3/third.py
+95
-0
未找到文件。
NO3/third.py
0 → 100644
浏览文件 @
ba21aa3f
import
requests
import
re
HEADERS
=
{
"User-Agent"
:
"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"
}
# 获取分页
def
get_pagesize
(
html
):
# 编写简单的正则表达式 <a href='68_(\d+).html'>末页</a>
pagesize
=
re
.
search
(
"<a href='68_(\d+).html'>末页</a>"
,
html
)
if
pagesize
is
not
None
:
return
pagesize
.
group
(
1
)
else
:
return
0
# 获取待抓取列表
def
get_wait_list
(
url
):
wait_urls
=
[]
try
:
res
=
requests
.
get
(
url
=
url
,
headers
=
HEADERS
,
timeout
=
5
)
res
.
encoding
=
"gb2312"
html_text
=
res
.
text
pagesize
=
int
(
get_pagesize
(
html_text
))
if
pagesize
>
0
:
print
(
f
"获取到
{
pagesize
}
页数据"
)
# 生成待抓取列表
for
i
in
range
(
1
,
pagesize
+
1
):
wait_urls
.
append
(
f
"http://p.ik123.com/zt/maomi/68_
{
i
}
.html"
)
return
wait_urls
except
Exception
as
e
:
print
(
"获取分页异常"
,
e
)
# 正则匹配详情页链接
def
format_detail
(
html
):
# 多次模拟得到正则表达式 <a class=preview href="(.*?)"
# 注意单引号与双引号嵌套
detail_urls
=
re
.
findall
(
'<a class=preview href="(.*?)"'
,
html
)
return
detail_urls
# 获取所有详情页链接数据
def
get_detail_list
(
url
):
try
:
res
=
requests
.
get
(
url
=
url
,
headers
=
HEADERS
,
timeout
=
5
)
res
.
encoding
=
"gb2312"
html_text
=
res
.
text
return
format_detail
(
html_text
)
except
Exception
as
e
:
print
(
"获取详情页异常"
,
e
)
def
format_mao_img
(
html
):
# 匹配猫咪图正则表达式 <img alt=".*?" src=".*?" />
mao_img_urls
=
re
.
findall
(
'<img alt=".*?" src="(.*?)" />'
,
html
)
return
mao_img_urls
# 获取猫咪图片地址
def
get_mao_img
(
detail_url
):
try
:
res
=
requests
.
get
(
url
=
detail_url
,
headers
=
HEADERS
,
timeout
=
5
)
res
.
encoding
=
"gb2312"
html_text
=
res
.
text
return
format_mao_img
(
html_text
)
except
Exception
as
e
:
print
(
"获取猫咪图片异常"
,
e
)
if
__name__
==
'__main__'
:
start_url
=
"http://p.ik123.com/zt/maomi/68_1.html"
wait_urls
=
get_wait_list
(
url
=
start_url
)
detail_list
=
[]
for
url
in
wait_urls
:
print
(
f
"正在抓取
{
url
}
"
)
detail_list
.
extend
(
get_detail_list
(
url
))
print
(
f
"获取到
{
len
(
detail_list
)
}
条详情页"
)
mao_imgs
=
[]
for
index
,
mao_detail
in
enumerate
(
detail_list
):
if
len
(
mao_detail
)
>
0
:
print
(
f
"正抓取第
{
index
}
页数据"
)
mao_imgs
.
extend
(
get_mao_img
(
mao_detail
))
# 以下代码测试用
if
len
(
mao_imgs
)
>
100
:
break
print
(
f
"获取到
{
len
(
mao_imgs
)
}
条猫咪图"
)
print
(
mao_imgs
[:
5
])
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录