博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
爬虫-request以及beautisoup模块笔记
阅读量:5059 次
发布时间:2019-06-12

本文共 5487 字,大约阅读时间需要 18 分钟。

requests模块

pip3 install requestsres = requests.get('')res.textres.cookies.get_dict()res.contentres.encodingres.aparent_encodingres.status_coderes = requests.post(    headers={        'User-Agent': ''    }    url="",    cookies={},    data={})

request.request参数详解

1. method: 提交方式2. url: 提交地址3. params: 在 url 上传递的参数,以 get 形式的提交数据4. data:  在 body 中提交的数据,字典:{"k1":'v1'}、字节:"k1=v1&k2=v2"、文件对象5. json:  在 body 中提交的数据,把数据进行一个 json.dump()后一个字符串后发送,字典中嵌套字典时使用6. headers: 请求头        Referer:你上一次访问的地址        User-Agent : 客户端7. cookies: cookies置于 header 中发送8. files:  文件对象9. auth:  在 hrader 中加入加密的用户名和密码来做认证10. timeout:  超时时间   (connect timeout, read timeout) 
.11. allow_redirects: 是否允许重定向12. proxies: 代理 proxys={ 'http':'http://192.168.112:8080' }13. verify: 布尔值,是否忽略https证书14. stream: 流式处理,布尔值,从 response.iter_content()中迭代去取15. cert: https 证书

request.session

s8.py测试,保存客户端历史访问信息

beautisoup 模块

1. name 根据标签名称获取标签

tag = soup.find('a')  # 查找name = tag.name  # 获取atag.name = 'span' # 设置

2. attrs 标签的属性

# tag = soup.find('a')# attrs = tag.attrs    # 获取# print(attrs)# tag.attrs = {'ik':123} # 设置会覆盖原来的所有属性# tag.attrs['id'] = 'iiiii' # 增加新的属性del tag.attrs['id']  删除某个属性# print(soup)

3. children 所有儿子标签,第一层

tag.children

4. descendants 子子孙孙的标签

tag.descendants

5.删除

  • clear,将标签的所有儿子标签全部清空(保留自己标签)
  • decompose 递归的删除所有,包括自己
  • extract 递归的删除所有标签,并返回删除的,通 pop 方法

6. 字节与字符串之间的转换

  • decode 对象转换为字符串,含有当前标签
  • decode_contents 转换为字符串,不含有当前标签
  • encode 对象转换为字节、含有当前标签
  • encode_contents 转换为字节、不含有当前标签

7. 匹配

  • find
tag = soup.find(    name='a',  # 标签    attrs={'class': 'sister'},  # 属性    recursive=True,  # 布尔值、True(只匹配一层,默认值);False(递归寻找)    text='Lacie'  # 标签文本匹配)tags = soup.find(name='a', class_='sister', recursive=True, text='Lacie')
  • find_all
tags = soup.find_all(    'a',limit=1 # limit 只匹配一个)--------------------v = soup.find_all(name=['a','div']) 匹配两个标签,关系为或v = soup.find_all(class_=['sister0', 'sister']) 匹配多个属性,关系为或v = soup.find_all(id=['link1','link2'])= soup.find_all(href=['link1','link2'])

8. 自定义正则

import rerep = re.compile('^h')v = soup.find_all(name=rep)rep = re.compile('sister.*')v = soup.find_all(class_=rep)rep = re.compile('http://www.oldboy.com/static/.*')v = soup.find_all(href=rep)

9. 自定义方法帅选

def func(tag):    return tag.has_attr('class') and tag.has_attr('id')v = soup.find_all(name=func)

10. has_attr 是否有属性检测

11. text get_text 文本获取

12. index 获取标签在在某个标签中的索引位置

tag = soup.find('body')v = tag.index(tag.find('div'))tag = soup.find('body')for i,v in enumerate(tag):print(i,v)

13. is_empty_element 判断是否是空标签或者自闭合标签

判断是否为:'br' , 'hr', 'input', 'img', 'meta','spacer', 'link', 'frame', 'base'tag = soup.find('br')v = tag.is_empty_element

14. 获取当前的关联标签(属性)

soup.next  # 下一个soup.next_elementsoup.next_elementssoup.next_siblingsoup.next_siblingstag.previous  # 上一个tag.previous_elementtag.previous_elementstag.previous_siblingtag.previous_siblingstag.parent  # 父标签tag.parents  # 层级父标签

15. 获取当前的关联标签(方法)

tag.find_next(...)tag.find_all_next(...)tag.find_next_sibling(...)tag.find_next_siblings(...)tag.find_previous(...)tag.find_all_previous(...)tag.find_previous_sibling(...)tag.find_previous_siblings(...)tag.find_parent(...)tag.find_parents(...)参数同find_all

16. css 选择器,同 js 标签选择器使用

soup.select("title")soup.select("p nth-of-type(3)")soup.select("body a")soup.select("html head title")tag = soup.select("span,a")soup.select("head > title")soup.select("p > a")soup.select("p > a:nth-of-type(2)")soup.select("p > #link1")soup.select("body > a")soup.select("#link1 ~ .sister")soup.select("#link1 + .sister")soup.select(".sister")soup.select("[class~=sister]")soup.select("#link1")soup.select("a#link2")soup.select('a[href]')soup.select('a[href="http://example.com/elsie"]')soup.select('a[href^="http://example.com/"]')soup.select('a[href$="tillie"]')soup.select('a[href*=".com/el"]')from bs4.element import Tagdef default_candidate_generator(tag):    for child in tag.descendants:        if not isinstance(child, Tag):            continue        if not child.has_attr('href'):            continue        yield childtags = soup.find('body').select("a", _candidate_generator=default_candidate_generator)print(type(tags), tags)from bs4.element import Tagdef default_candidate_generator(tag):    for child in tag.descendants:        if not isinstance(child, Tag):            continue        if not child.has_attr('href'):            continue        yield childtags = soup.find('body').select("a", _candidate_generator=default_candidate_generator, limit=1)print(type(tags), tags)

17. 标签内容

tag = soup.find('span')print(tag.string)          # 获取tag.string = 'new content' # 设置print(soup)

18. append 在当前标签内部最后追加一个标签对象

tag = soup.find('body')tag.append(soup.find('a'))print(soup)from bs4.element import Tagobj = Tag(name='i',attrs={'id': 'it'})obj.string = '我是一个新来的'tag = soup.find('body')tag.append(obj)print(soup)

19. insert 在当前标签内部指定位置插入一个标签对象

from bs4.element import Tagobj = Tag(name='i', attrs={'id': 'it'})obj.string = '我是一个新来的'tag = soup.find('body')tag.insert(2, obj)print(soup)

20. insert_after、insert_before 在指定标签的前面或者和面插入一个标签对象

21. replace_with 将当前标签替换为指定的标签一个标签对象

22. 创建标签之间的关系,不修改 html 中的位置,只修改逻辑属性关系

tag = soup.find('div')a = soup.find('a')tag.setup(previous_sibling=a)print(tag.previous_sibling)

23. wrap 将指定标签把当前标签包裹起来

div = soup.find('div')a = soup.find('a')div.wrap(a) # 将 div 包裹进 a标签中

24.unwrap,去掉当前标签,将保留其包裹的标签

a = '
测试
test
'tag = soup.find('div')v = tag.unwrap()v = '测试test' # 把外层的标签去除,将保留其包裹的标签

转载于:https://www.cnblogs.com/forsaken627/p/8622844.html

你可能感兴趣的文章
iOS 使用Quartz 2D画虚线 【转】
查看>>
平面最接近点对
查看>>
HTML列表,表格与媒体元素
查看>>
PHP、Java、Python、C、C++ 这几种编程语言都各有什么特点或优点?
查看>>
感谢青春
查看>>
Jquery Uploadify4.2 falsh 实现上传
查看>>
雨林木风 GHOST_XP SP3 快速装机版YN12.08
查看>>
linux基础-命令
查看>>
java对象的深浅克隆
查看>>
Hadoop流程---从tpch到hive
查看>>
数据结构3——浅谈zkw线段树
查看>>
Introduction to my galaxy engine 2: Depth of field
查看>>
V2019 Super DSP3 Odometer Correction Vehicle List
查看>>
Python 3.X 练习集100题 05
查看>>
今时不同往日:VS2010十大绝技让VS6叹服
查看>>
设计器 和后台代码的转换 快捷键
查看>>
在线视频播放软件
查看>>
用代码生成器生成的DAL数据访问操作类 基本满足需求了
查看>>
28初识线程
查看>>
Monkey测试结果分析
查看>>