目的
梳理一些常用的库和api
requests
bug
requests.exceptions.InvalidHeader: Invalid return character or leading space in header: Host
原因在于从浏览器上粘贴的header上有空格
正确的header去掉前面的空格
session
参考文献
不使用系统代理
- 指定域名不使用代理
1 2 3 4 5 6
| import os import requests os.environ['NO_PROXY'] = 'stackoverflow.com' response = requests.get('http://www.stackoverflow.com')
|
- 设置代理为None
1 2 3 4 5 6 7 8 9
| import requests proxies = { "http": None, "https": None, } requests.get("http://example.org", proxies=proxies)
|
- 设置trust_env = False
1 2 3 4 5 6
| import requests session = requests.Session() session.trust_env = False response = session.get('http://www.stackoverflow.com')
|
BeautifulSoup
简介
BeautifulSoup经常被用来处理html文本,提取对应的dom元素,或者操作dom元素,添加修改删除等
导入
1
| from bs4 import BeautifulSoup
|
常用API
添加dom元素
在bs下添加dom元素变得很简单
1 2 3 4 5 6
| new_table = soup.new_tag("table")
new_table.attrs = {'src': f"{month}.html","height": "602","width":"996"}
new_table.append(soup.new_tag("tr"))
|
直接查找html标签
如果是简单html标签的操作,直接对bs对象进行下标索引即可以得到,例如查找body标签下的h1标签可以直接如下进行查找
find和find_all
一般来说,find用于需要查找的元素只有一个的情况,find_all则适用于需要查找多个相应元素的情况,除了返回的类型不一样,用法是一样的
查找class名为特定值的元素
1
| soup.find(class_="table_container")
|
查找属性值为特定值的元素,并返回标签中的文本
1
| row.find(attrs={"data-stat" :dataStat}).text
|
selenium
xpath
简介
非常好用的dom元素选择器
基本操作
在浏览器的console下操作
1 2 3 4 5 6 7 8
|
$x("//h4/a/@href").map(item=>item.value)
$x("//*[@id='rongqi_2']//@href").map(item => item.value)
|
参考文献
反参数化
1 2
| from urllib.parse import unquote unquote("xxx")
|
参考文献
scapy
scrapy中的异步和多线程
参考文献