python爬虫(二)requests与BeautifulSoap

Requests库

昨天介绍了python爬虫使用的基本请求库Urllib,今天我们来看一下进阶版的请求库Requests

简单的数据请求

import requests
payload = {'key1': 'value1', 'key2': 'value2'}
headers = {'content-type': 'application/json'}
r = requests.get("http://httpbin.org/get", params=payload, headers=headers)
print(r.text)

文件上传请求

import requests
url = 'http://httpbin.org/post'
files = {'file': open('post_file.txt', 'rb')}
r = requests.post(url, files=files)
print(r.text)

json获取及解析

import requests

r = requests.get("https://github.com/timeline.json", stream=True)
print(r.text)  # 网页源码     #{"message":"Hello there, wayfaring stranger.
print(type(r.text))  # <class 'str'>
print(r.json())  # json解析  #{'message': 'Hello there, wayfaring stranger.
print(type(r.json()))  # <class 'dict'>
print(r.raw)  # 获取套接字

Cookie获取与上传

import requests
url = 'http://httpbin.org/cookies'
cookies = dict(cookies_are='working')
r = requests.get(url, cookies=cookies)
# 此处分别演示了传递cookie与获取cookie
# 但由于域不同,获取到的cookie列表不会包含元素
print(r.cookies)

会话保持的请求

import requests
s = requests.Session()
s.headers.update({'x-test': 'true'})
# 使用会话的get/post方法可以继承会话header和cookie信息
r = s.get('http://httpbin.org/headers', headers={'x-test': 'false'})
print(r.text)  # x_test:false

SSL请求(证书过期跳过)

import requests
r = requests.get('https://portal.ikuai8.com', verify=False)
print(r.text)

通过代理发起请求

# 引入requests模块
import requests

# 建立代理
proxy = {
    'http': 'http://106.75.25.3:80'
}
r = requests.get('http://httpbin.org/get', params={'a': 1}, proxies=proxy, timeout=1)
print(r.text)  # 106.75.25.3
print('*' * 100)
r = requests.get('http://httpbin.org/get', params={'a': 1}, )
print(r.text)  # your_ip

BeautifulSoap库

Beautiful Soup 是 python 的一个库,最主要的功能是从网页抓取数据。
Beautiful Soup 提供一些简单的、python 式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。
Beautiful Soup 自动将输入文档转换为 Unicode 编码,输出文档转换为 utf-8 编码。如果输入文档没有指定编码,则需要手动说明文档编码。

简单页面解析

from bs4 import BeautifulSoup
import requests
html=requests.get('http://www.baidu.com').text
soup=BeautifulSoup(html,'html.parser')
print(soup)
print(type(soup))

文档树遍历方法

文档树遍历的操作关键字如下

  • 直接子节点集合 contents
  • 子孙节点集合 children
  • 节点内容 string
    • 如果tag对象有若干子节点,则string无法确定该显示哪个子节点内容,返回为None
  • 去除空白的节点内容 stripped_string
  • 父节点 parent
  • 全部父节点 parents
  • 兄弟节点(同级且同类)
    • 前面兄弟节点 privious_siblings
    • 后面兄弟节点 next_siblings
    • 上一个兄弟节点 privious_sibling
    • 下一个兄弟节点 next_sibling
  • 前后节点(不分层次)
    • 前面节点 privious_elements
    • 后面节点 next_elements
    • 上一个节点 privious_element
    • 下一个节点 next_element

文档树搜索方法

最常用的搜索方法为find_all(),代码如下:

from bs4 import BeautifulSoup
import codecs
soup=BeautifulSoup(codecs.open('demo1.xml',encoding='utf-8'),'html.parser')
print(soup.find_all(href=re.compile('www.*'),limit=1))

css选择器

BeautifulSoup同样支持css选择器式的搜索方法
具体css选择器写法这里不做介绍,搜索代码如下

from bs4 import BeautifulSoup
import requests

html = requests.get('https://www.baidu.com').text
soup = BeautifulSoup(html, 'html.parser')
list = soup.select('#head .head_wrapper')
for div1 in list:
    print(div1)
    print(type(div1))
    print(div1.div.div.attrs['class'])

猜你喜欢

转载自blog.csdn.net/bkk854762363/article/details/78916589