赞
踩
首先找到一个我们要爬取的网页,右键后,打开检查
找到网络选项 ,并刷新网页
在下面条目的响应中找到自己想要的数据(我们这次想要获取的是小说的目录)
可以看到我们想要的数据在这个08331/中
在的08331/标头中找到对应的URL
复制下来
requests模块是第三方模块,可以在控制台输入下列命令下载(要联网)
进入PyCharm,创建一个py文件,导入requests模块
利用requests模块中的get函数,传入我们上面复制的URL,用response变量接收返回值
我们可以直接打印response查看状态码,如果是200就代表正常访问
此时response.text就是我们获取的网页数据
- import requests
-
- url="https://www.biquge365.net/newbook/08331/"
- response=requests.get(url)
- print(response)
我们用content接收response.text,再将response关闭
- content=response.text
- response.close() #将response关闭
这样我们就获取了我们需要的数据,但里面还有很多东西不是我们想要的,接下来就要数据解析,来从一堆乱七八糟的数据中得到我们需要的
打印content得到的内容
我们可以用正则表达式来从content中获取我们要的数据
正则表达式简单来说就是一种规则,我们可以利用正则表达式从文本筛选符合该种规则的字符串
正则表达式主要依赖元字符,下面是我们会用到的元字符的介绍:
.*? 惰性匹配:匹配尽可能少的字符
举个例子:“我......爬虫”如果我们要匹配省略号中的字符串,那么我们对“我写出来爬虫了,看来爬虫不难嘛”进行匹配,会得到“写出来”,“写出来爬虫了,看来”两个字符串,这两个字符串都符合规则,但如果我们用“我.*?爬虫”作为表达式,就只会得到“写出来”。
re模块中会用到的函数介绍:
- #finditer:匹配字符串中所有符合正则的内容(以迭代器形式返回) 从迭代器迭代对象是match对象,拿到内容要用group()方法
- #\d:匹配数字
- iter1=re.finditer(r"\d","小白鼠的寿命约有1-3年,也是常用的哺乳动物模式生物,青蛙的寿命一般为5年。")
- for i in iter1:
- print(i.group()) #打印1 3 5
导入re模块,根据目标数据在content里的特征写出相应的正则表达式
我们可以发现每个章节名称都镶嵌在一个相同的结构中,除了框选的内容,其他都是一样的。我们可以根据这相同部分来提取章节名称
- #在正则表达式中想获取内容的位置改成(?P<分组名字>表达式),即可单独获取该内容
- data=re.finditer(r'<li><a href=".*?" title="(?P<title>.*?)">.*?</a></li>',content)
- for item in data:
- print(item.group("title")) #打印一下看看结果
在项目里创建个文件,将数据写入就行了
- import requests
- import re
-
- url="https://www.biquge365.net/newbook/08331/"
- response=requests.get(url)
- content=response.text
-
- #在正则表达式中想获取内容的位置改成(?P<分组名字>表达式),即可单独获取该内容
- data=re.finditer(r'<li><a href=".*?" title="(?P<title>.*?)">.*?</a></li>',content)
- for item in data:
- with open("神秘复苏目录.txt","a") as f:
- f.write(item.group("title"))
- f.write("\n")
- response.close()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。