import requests
import re
Step2 · 写
1.请求网页源代码
url = "http://www.baidu.com"
resp=requests.get(url)
print(resp.text)
2.获取内容
1.初始形态
obj = re.compile(r"XXXXXX", re.S) #用时调用obj即可(正则预加载)
result = obj.finditer(resp.text) #从请求网页的代码中匹配
for it in result:
print(it.group())
2.设定匹配内容
obj = re.compile(r"2021必看热片.*?<ul>(?P<ul>.*?)</ul>", re.S) #(?P<name>.*?)可认为是声明了name这个量
result = obj.finditer(resp.text) #从请求网页的源代码中匹配
for it in result:
print(it.group('ul')) #输出设定的内容
3.将匹配到的内容编为一个列表
obj = re.compile(r"<a href='(?P<url>.*?)'", re.S) #(?P<name>.*?)可认为是声明了name这个量
url_list = [] #声明一个列表
result = obj.finditer(resp.text) #从请求网页的源代码中匹配
for it in result:
url = it.group('url')
url_list.append(url) #存储到列表里
4.从存储的列表中匹配内容
obj_child = re.compile(r"◎片 名(?P<mname>.*?)<br />", re.S) #从子页面中匹配所用的表达式
for url in url_list:
child_resp = requests.get(url,verify=False) #请求url_list中的url,设置不验证
child_resp.encoding = 'gb2312' #设置请求的编码为gb2312
result_name = obj.finditer(child_resp) #从child_resp中查找内容
for name in result_name:
print(it.group("mname")) #输出片名
eg.电影天堂爬 2021 必看热片中的片名和下载链接
import requests
import re #导包
domain = "https://www.dy2018.com/" #设置url
resp = requests.get(domain , verify=False) #从设置的url请求,并设置不验证
resp.encoding = "gb2312" #设置编码为gb2312
obj1 = re.compile(r"2021必看热片.*?<ul>(?P<ul>.*?)</ul>",re.S) #将这个版块中的每一个<li>筛出来(ul)
objhref = re.compile(r"<a href='(?P<url>.*?)'", re.S) #将<li>中的<a>上的链接筛出来(url)
objmoviename = re.compile(r"◎片 名(?P<mname>.*?)<br />",re.S) #将子页面中的片名筛出来(mname)
objdown = re.compile(r'<!--xunleiDownList Start-->.*?<td.*?<a href="(?P<downurl>.*?)"',re.S) #将子页面中的下载地址筛出来(downurl)
result1 = obj1.finditer(resp.text) #从首页源码中查找
child_url_list = [] #声明列表
for it in result1:
ul = it.group('ul') #将查找结果设置为ul
result2 = objhref.finditer(ul) #跟随上一行,从ul中查找url
for itt in result2:
url = itt.group('url').strip("/") #将查找url的结果设置为url,并去掉开头的“/”
child_url = domain + url #将域名和查找到的url(相对路径)拼接到一起
child_url_list.append(child_url) #所有结果列成表 存到child_url_list中
for url in child_url_list: #从child_url_list这个表中循环
child_resp = requests.get(url, verify=False) #请求子页面
child_resp.encoding = 'gbk' #设置编码
resultname = objmoviename.finditer(child_resp.text) #调用查找片名的表达式,从子页面请求
resultdownurl = objdown.finditer(child_resp.text) #调用查找下载地址的表达式,从子页面请求
for child_it in resultname:
mname = child_it.group('mname').strip('') #将片名存为mname,并去掉前面的空格
for child_itt in resultdownurl:
downurl = child_itt.group('downurl') #将下载地址存为downurl
print(mname + ':' + downurl) #输出格式:“片名:下载地址”
附录 1:一些问题
设置 user-agent:
headers= {
"User-Agent" : "xxxxxx"
}
...
resp = requests.get(url,headers=headers)
SSL 证书验证问题:
resp = requests.get(url,verify=False)
编码乱码问题:
resp.encoding = "utf-8"