爬虫库知识总结

时间:2021-05-30
本文章向大家介绍爬虫库知识总结,主要包括爬虫库知识总结使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

注意事项:

1 对于爬虫的每一步都要考虑到可能出现的错误,增加代码的可靠性

2 爬虫需要分析后再写代码,保证网页在有一定的修改后依然能正确的运行

3 要增加代理保证爬虫不被限制

4 在有移动端的情况下,最好去模拟手机去爬取移动端

爬取步骤

1 获取网页内容:getHTMLText()

2 提取信息到合适的数据结构:fillUnivList()

3 利用数据结构展示内容:printUnivList()

爬虫模版

import requests
keyword="python"
headers = {
  "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36",
}
try:
    kv = {'wd': keyword}
    r=requests.get('https://www.baidu.com/s',params=kv,headers=headers)
    r.raise_for_status()
    print(r.text)
except:
		print("爬取失败")

Requests

构造一个请求

request(method,url,kwargs)

用get方法去请求

get(url,params,kwargs):

常用的参数与函数

params:url中额外的参数

kwargs:控制访问参数

headers:字典,http头信息

cookies:字典

auth:元组 http认证功能

timeout:单位秒

proxies:字典 设置代理,可增登录认证

pxs={'http':'[http://10.10.10.1:3214]'}

post():用post方法去请求

head():获取网页头信息

put():写数据

patch():局部修改

delete():删除

requests异常

ConnectionError:DSN查询失败,拒绝连接等

HTTPError:HTTP错误异常

URLRequired:url缺失

Timeout:请求超时

response属性

r.status_code:200成功 404(页面不存在) 500(服务器不存在)

r.text:相应的内容

r.encoding:从header中猜测的编码方式

r.apparent_encoding:从内容中分析出编码(已知要爬去的网页的编码格式,可不调用这个函数以此优化)

r.raise_for_status():如果不是200产生HTTPError错误

BeautifulSoup

  • soup.b获取子节点下第一个b标签

  • tag对象

    tag['class'] 获取标签的class属性值

    tag.attrs 全部属性

  • NavigableString

    tag.string 如果tag里面只有内容没有其他子标签,可以这样获得内容

  • find_all( name , attrs , recursive , text , **kwargs )

    name标签名字

    attrs属性名字

    limit=3 限制搜索的个数

    recursive 如果只想搜索tag的直接子节点,可以使用参数 recursive=False

  • from bs4 import BeautifulSoup

    soup=BeautifulSoup(open(index.html)

  • demo=soup.text #获取节点内全部文本内容

  • [soup.b.parent.parent.name] #查看祖父节点名字

  • 没有返回说明是空信息

  • soup.b.contents #查看这个节点的内容 返回列表类型 转义字符等也算节点内容

    len(soup.b.contents) #查看子节点的个数

    soup.b.contents[0] #看第一个子节点

  • soup.p.next_sibling #下一个平行标签

    soup.previous_next_sibling #上一个平行标签

  • soup.p.prettify() #给每一个标签加一个‘\n’

tag = soup.b	#获取标签
tag['class']	#查看标签类名
tag.attrs	#查看标签属性
tag['class'] = 'verybold'
tag['id'] = 1 #如果属性不存在。将创建一个属性
del tag['class']
del tag['id']
css_soup = BeautifulSoup('<p class="body strikeout"></p>')
css_soup.p['class']

for child in soup.body.children: #遍历子节点
		print(child)
for child in soup.body.descendants: #遍历子孙节点
		print(child)
    
for parent in soup.p.parents: #遍历p的全部上级标签
		if parent is None:
				print(prrent) #父标签不存在就不能打印了
		else:
				print([prrent.name])
        
for sibling in soup.p.next_siblings: #遍历p的全部前面标签
		print(sibling)

for sibling in soup.p.previous_next_siblings: #遍历p的全部后面标签
		print(sibling)

for link in soup.find_all('a'): #返回列表类型
		print(link.get('href'))

soup.find_all() #查找a和b标签
soup.find_all(['a','b'],'course','asdasd') #查找a标签属性为course的标签
soup.find_all(id='box') #查找id=box的标签
divs=soup.findAll('div',{'class':'gl-i-wrap'})
divs=soup.findAll('div',class_='gl-i-wrap')

原文地址:https://www.cnblogs.com/tzfs/p/14828919.html