爬虫的基础框架:
import requests
url='所爬取的网页链接'
response = requests.get()
print(response.text)
这样能拿到页面的源代码数据
web请求:
1、服务器渲染:由服务器将数据和html整合,在发送给客户端
2、客户端渲染:先拿到html的骨架,第二次请求在数据,在客户端将骨架和数据整合
如果一个网页数据是客户端渲染这时在页面源代码中往往没有我们所需要爬取的数据,需要在浏览器的抓包工具中寻找第二次请求的数据
re正则
. 匹配除换行符以外的所有字符
/w匹配字母或数字或下划线
/W匹配非字母数字下划线
/s匹配所有的空白符
/S匹配非空白符
/d匹配数字
/D匹配非数字
/t匹配一个制表符
a|b 匹配字符a或者b
[......]匹配字符组中所有字符
[^......]匹配除了字符组中所有字符
^匹配字符串的开始
$匹配字符串的结尾
量词:控制上面字符出现次数
*匹配零次或多次
+匹配一次或多次
{n}重复n次
{n,}重复n次或者更多次
{n,m}重复n到m次
举例:我的号码是:123456789
正则:/d+
结果:123456789
.* 贪婪匹配(尽可能多的匹配)
.*? 惰性匹配(尽可能少的匹配)
举例:我们明天去玩,去哪里玩呢?
正则:我们.*玩
结果:我们明天去玩,去哪里玩
正则:我们.*?玩
结果:我们明天去玩
a='我们明天去玩,去哪里玩'
re预加载正则表达式
obj=re.compile(r'我们我们.*?玩')
result=obj.finall(a)
findall:查找所有,返回list
result=obj.finditer(a)
finditer:查找所有,和findall效果差不多,但是finditer返回的是迭代器,需要用.group()返回结果
search:查找第一个,找到就返回结果是一个match类型也需要使用.group()返回结果,没找到返回None
match:从第一个开始匹配,返回match类型,还是用.group()返回结果
.group()返回正则匹配的一个结果
.groups()以元组类型返回正则匹配的全部结果,没有则返回空元组
BeautifulSoup:导入方式:from bs4 import BeautifulSoup
url='所爬取的网页链接'
response = requests.get()
page=BeautifulSoup(response.txt,'html.parser')将页面交给BeautifulSoup处理,html.parser:指定html解析器
page.find("a",class_='cc'):查找第一个class属性值为cc的a标签,因为class是python中的关键字,所以后面加_,用于区分
xpath解析:导入模块from lxml import etree
将数据交给etree解析
html=etree.HTML(response.text)
然后就是通过html语言的标签一级一级的拿到数据
tree=html.xpath('/html/ul/li/a/text()')拿到a标签的内容