锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

python爬虫二

时间:2023-02-18 13:30:00 itt连接器kpse08f24

2.1正则表达式

1.正则表达式:检索和筛选文本字符串的规则形式
详情请参考链接帖:
正则表达式测试验证工具:https://tool.oschina.net/regex
2.贪婪匹配和惰性匹配:
例:字符串 “abcdacsdnd”

①懒惰匹配      regex = "a.*?d"  ②贪婪匹配      regex = "a.*d"  测试代码: 
# coding=UTF-8 import re  str = "abcdacsdn" print("原始字符串 "   str)  # 懒惰匹配 regexL = "a.*?d" print("懒惰匹配 = "   regexL) regL = re.compile(regexL) listL = re.findall(regL, str) print("懒惰匹配结果") print(listL)  # 贪婪匹配 regexT = "a.*d" print("贪婪匹配 = "   regexT) regT = re.compile(regexT) listT = re.findall(regT, str) print("贪婪匹配结果") print(listT) 

测试结果:
在这里插入图片描述
结果分析:

    懒惰匹配,成功匹配两次,一次abcd,一次acsd,符合条件的匹配abcd停止匹配,不会干扰后续匹配。      贪婪匹配,匹配成功一次,只有abcdacsd,匹配字符串后,字符串将被最大限度地占用  以上两种,一种是尽可能匹配最短的串,另一种是匹配最长的串 

2.2PYTHON re模块

import re  # findall():匹配字符串中所有的符合正则的内容 lst=re.findall(r"\d ","我的电话号码是:10086,我女朋友的电话号码是:10010") ''1.返回值类型list 2.前加字符串"r"防止转义 ''' print(lst) print(type(lst))   # finditer:匹配字符串中的所有内容[返回迭代器],需要从迭代器中获得内容.group() it=re.finditer(r"\d ","我的电话号码是:10086,我女朋友的电话号码是:10010")
for i in it :
    print(i.group())


#search:全文匹配找到一个结果就返回,返回的数据类型为match对象,拿数据需要.group()
s=re.search(r"\d+","我的电话号码是:10086,我女朋友的电话是:10010")
print(s.group())


#match:只能从头开始匹配,此处类似于"^\d+"
# s=re.match(r"\d+","我的电话号码是:10086,我女朋友的电话是:10010")
# print(s.group())
print("3")

#预加载正则表达式
obj=re.compile(r"\d+")
ret=obj.finditer("我的电话号码是:10086,我女朋友的电话是:10010")
for it in ret:
    print(it.group())

print("4")
ret=obj.findall("我的电话号码是:10086,我女朋友的电话是:10010")
print(ret)

s=""" 
tg
rf
cd
nh
"""
#(?P<分组名字,不能为数字!!>正则) 可以单独从正则匹配的内容中提取到信息 obj=re.compile(r''''''<div class='.*?'><span id='(?P\d+)'>(?P<asd>.*?)</span></div>",re.S) result=obj.finditer(s) for it in result: print(it.group("asd")) print(it.group("qwe"))

2.3手刃豆瓣top250电影排行榜

import csv

import requests
import re

url = "https://movie.douban.com/top250"

headers = { 
        
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
}
resp = requests.get(headers=headers, url=url)
page = resp.text
#print(resp.text)
resp.close()

# re解析
obj = re.compile(r'''
  • .*? (?P.*?) .*?

    .*?导演: (?P.*?) ''' , re.S) result = obj.finditer(page) f=open("data.csv",mode="w",encoding="utf-8") csvwriter=csv.writer(f) for it in result: #print(it.group("name")) dic=it.groupdict() #dic['year']=dic['year'].strip() csvwriter.writerow(dic.values()) f.close() print("over")

  • 2.4爬取电影天堂

    
    ```python
    import requests
    import re
    import urllib3
    urllib3.disable_warnings()  #关闭系统提示主动发送链接请求警告
    
    #打开网站首页,筛选电影子链接
    domain="https://www.dytt8.net/index2.htm"
    resp=requests.get(domain,verify=False) #verify=False关闭防火墙
    resp.encoding='gb2312'
    #print(resp.text)
    text=resp.text
    resp.close()
    
    obj1=re.compile(r'最新电影下载](?P.*?).*?',re.S)
    obj2=re.compile(r"",re.S)
    lst=[]
    result1=obj1.finditer(text)
    for it in result1:
        data1=it.group('self_domain')
        result2=obj2.finditer( data1)
        for itt in result2:
            index="https://www.dytt8.net" + itt.group('href')   #将子链接和首页网址进行拼接拿到完整子链接
            lst.append(index)
            #print(lst) 将子链接添加到一个列表当中
    
    #依次遍历列表中的子链接并且进行信息甄选
    obj3=re.compile(r"◎简  介

    (?P.*?)


    "
    ,re.S) for href in lst: child_resp=requests.get(href,verify=False) child_resp.encoding="gb2312" result3=obj3.finditer(child_resp.text) for ittt in result3: print(ittt.group('introduction'))
    
    
    
    锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

    相关文章