【爬虫】三、数据解析之re解析正则表达式+爬取京东商城和电影天堂

您所在的位置:网站首页 爬虫游戏视频大全 【爬虫】三、数据解析之re解析正则表达式+爬取京东商城和电影天堂

【爬虫】三、数据解析之re解析正则表达式+爬取京东商城和电影天堂

2023-03-22 15:46| 来源: 网络整理| 查看: 265

re解析(正则表达式 )

从超长字符串中提取相应的内容。 优点:速度快、效率高、准确率高。 缺点:上手难。 语法:使用元字符进行排列组合匹配字符串。

元字符:具有固定含义的特殊符号。 常用元字符 在这里插入图片描述 量词:控制元字符出现的次数。 在这里插入图片描述 贪婪匹配:. 即尽可能多的匹配内容。 惰性匹配:.*? 即尽可能少的匹配内容。*

import re # findall:匹配字符串中的符合正则表达式的内容,但效率低 lst = re.findall(r"\d+","第一:10010,第二:10086") #第一个参数为正则表达式(前面的r用于规范化),第二个参数为内容 print(lst) # finditer:匹配字符串中所有的内容,返回迭代器,从迭代器拿到内容需要结果.group() it = re.finditer(r"\d+","第一:10010,第二:10086") print(it) print("----------") for i in it: print(i) print(i.group()) #用group取匹配到的内容 print("----------") # search:全文匹配,只要检索有一个就返回match对象,用结果.group()显示 s = re.search(r"\d+","第一:10010,第二:10086") print(s.group()) print("----------") # match:从头匹配,有就返回match对象,用结果.group()显示,头不是就返回none m = re.match(r"\d+","10010,第二:10086") print(m.group()) print("----------") #预加正则表达式 # obj = re.compile(r"\d+") #可反复使用 # # ret = obj.finditer("第一:10010,第二:10086") # for j in ret: # print(j.group()) s = """ 周杰伦 林俊杰 蔡依林 林依晨 """ # (?P正则表达式) 单独提取出某内容到分组中 # obj = re.compile(" .*?",re.S) #表示包括换行符在内的任意字符 obj = re.compile(" (?P.*?)",re.S) # (?P.*?) 表示.*?取出的值存分组name中 ret = obj.finditer(s) for its in ret: print(its.group()) print(its.group("name")) 例子:爬京东商城 import requests import re import csv def getPage_content(page): url = "https://search.jd.com/Search?keyword=手机pvid=f7d4325adc364c5aa375cbf619c218c6&page="+str(page)+"&s=116&click=0" header={"user-agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"} resp = requests.get(url,headers=header) page_content = resp.text resp.close() return page_content def parse_page(page_content): #解析数据 obj = re.compile(r'.*?(?P.*?)' r'.*?.*?(?P.*?)(?P.*?)',re.S) result = obj.finditer(page_content) return result if __name__=='__main__': f = open("phone.csv",mode='w',encoding='utf-8',newline="") csvwriter = csv.writer(f) for page in range(1,3): page_content = getPage_content(page) result = parse_page(page_content) for it in result: # print(it.group("name")) # print(it.group("price")) # print(it.group("shopName")) # print(it.group("discounts1")) # print(it.group("discounts2")) # print("--------------------") dic = it.groupdict() csvwriter.writerow(dic.values()) f.close() 例子:爬电影天堂 import requests import re import csv url = 'https://www.dytt8.net/index2.htm' resp = requests.get(url) # 手动设定响应数据的编码格式 resp.encoding = resp.apparent_encoding page_content = resp.text resp.close() obj = re.compile(r'

2023新片精品.*?(?P.*?)',re.S) obj2 = re.compile(r"]",re.S) obj3 = re.compile(r'◎译  名 (?P.*?)◎片  名 ' r'(?P.*?).*?',re.S) result = obj.finditer(page_content) domain = "https://www.dytt8.net" linkList = [] for it in result: ul = it.group("ul") movies = obj2.finditer(ul) for it2 in movies: link = domain+it2.group("href") linkList.append(link) f = open("movie.csv",mode='w',encoding='utf-8',newline="") csvwriter = csv.writer(f) for href in linkList: herfResp = requests.get(href,verify=False) herfResp.encoding = 'gb2312' #设置编码charset # print(herfResp.text) downloadDic = obj3.search(herfResp.text).groupdict() csvwriter.writerow(downloadDic.values()) herfResp.close() f.close()



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3