一、requests(适用于爬取静态网页)
1.get
requests.get(参数)
参数可以是:
接收一个网址,url {
在请求某个查询时,在通用网址后+?query=查询的内容
比如:
在搜狗引擎中,搜索,
content = input("请输入你要搜索的内容")
url = "https://www.sogou.com/web?query={content}"
在百度中:
content = input("请输入你要搜索的内容")
url = "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd="
}
权限人 headers (有时候不能直接爬取需要加上)
多参数 params (字典形式,当网址太长,?后面带有很多参数时候,可以找到Query String Parameters,进而找到对应的参数,定义成字典形式传参)
总形式:
requests.get(url,headers=,params=)
返回:
查询页面的源码
根据不同编码形式,有utf-8、gbk等,通过charset查看
返回值可以通过.text,.json()等获取文本或者json形式内容
2.post
requests.post(参数)
参数可以是:
大致和get一样
例外:
参数:
查看kw
传参data=
总形式:
requests.post(url,headers=,data=)
注意点:
网址有的隐藏在sug中,不能直接得到
二、对爬取内容筛选关键信息
1.re
通过正则表达式将获取到的内容进行筛选提取
语法规则:
re.compile("")
括号里的引号是单引号还是双引号根据内容中的引号形式而定,取相反
引号中内容:
通过.*?懒惰匹配得到关键信息,若想分组提取出来,用(?P<组名>.*?)
2.bs4
通过bs4模块的BeautifulSoup进行筛选提取
语法规则:
BeautifulSoup(获取的网页内容, "html.parser")
html.parser 是网页内容解析器,返回解析后的结果
需要对前端的语法了解一丢丢,比如标签,属性......利用这些特性取筛选提取内容
最常用的就是.find()和.find_all(),一个是找到一个就停止,一个是找到所有满足条件的内容,由于参数一致,以find()函数讲解
.find(参数1,attrs={参数2})
参数1是带引号的标签,比如"div", "a", "img"......;
参数2是字典形式的属性值,比如"class": "people", "color": "red"......可以划定范围;
3.xpath
通过lxml模块中的etree的函数xpath函数进行筛选提取
xpath("参数")
参数语法:
第一个位置的单个/代表根节点,即祖宗,除了首位置的/,单个/都代表最近的子节点,即儿子;
两个/即//代表子子孙孙中;
./代表在当前位置基础上继续搜索;
如果某个父亲的儿子有很多,选某个儿子可以用中括号选取[第几个],从1开始;
/text()表示当代位置包含的文本;
//text()表示当代和子子孙孙代所包含的文本;
/*任意一个儿子,*是通配符;
在一个标签后面紧跟一个中括号[],[]表示属性筛选,参数形式:@某个属性=值;
最后一个位置/后面紧跟一个@,@后面跟属性,可以拿到属性的值
三、如果网页是动态页面,有些数据被隐藏了,可以用selenium模块,但是只能爬取原始页面,可以多次使用进入子页面
持续更新!