HTTP 请求库
urllib 或 requests
- urllib.request请求页面(requests是第三方的,比urllib慢一点)
- html = urllib.request.urlopen(url)
- data = html.read()
- html.geturl() 获取地址,没想到应用场景
- html.getcode() 获取状态码,200说明是正常访问
- 下载:urllib.request.urlretrieve(网址, 保存名);
内容获取(匹配方法)
正则表达式
- 一个好用的工具,可以直接生成想要的功能的正则表达式
import re
def Get_Data_Img(data)
# re_01 = r'[a-zA-z]+://[^\s]*.jpg';
re_01 = r'https://d-paper.i4.cn/max/[^\s]*.jpg'#大图的
pat = re.compile(re_01)# 创建一个正则表达式的模板
imgurls = re.findall(pat,data);# 开始匹配
print(len(imgurls), imgurls)
i = 0
for imgurl in imgurls:
print("第%d张图片地址:%s"%(i,imgurl))
urllib.request.urlretrieve(imgurl,"./image/%d.jpg"%i)#下载
i+=1;
Get_Data_Img(str(data))#强制类型转换
Beautifulsoup
将复杂HTML文档转换成一个复杂的树形结构,
- soup = BeautifulSoup(data,"html.parser")
- 用“.xxx” 来获取名为xxx子标签
- soup.find("meta",attrs={"name":"description"}) 找第一个满足标签和属性条件的标签
- find_all找到的是所有的,返回list
- .test或.string返回一个标签的内容
- eg:soup.div['title']获取div标签里的title属性的内容
反反爬
- 模拟浏览器:在Netword里的header里看浏览器的User-Agent信息,用requests的话, req = requests.get(new_url,header),然后html = req.content或req.text