路虽远 行则将至

Lee


  • 主页
  • 归档
  • 分类
  • 标签
  •   

站点访客数   人

站点浏览量   次

本页浏览量   次

© 2024 辣辣辣白菜

Theme Typography by Makito

Proudly published with Hexo

Python爬虫学习 - RE模块

Posted at 2021-06-14 学习笔记  Python 

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"

공유하기 

 이전 포스트: Python爬虫学习 - 初识Bs4 다음 포스트: OpenCore U盘全新直装BigSur 

站点访客数   人

站点浏览量   次

本页浏览量   次

© 2024 辣辣辣白菜

Theme Typography by Makito

Proudly published with Hexo