正则表达式爬取网页实战

网址:猫眼电影排行榜

1.前提

首先,Chrome浏览器,右键点击“检查”,打开开发者模式,切换到network,点击当前页面4/。点开后,切换到response,查看源代码。若是直接看elements中的代码,有可能和源代码不同,因为那是经过浏览器加工后的代码。

在这里插入图片描述

2.确定爬取目标

我们爬取出电影序号,电影名称,图像链接,主演,电影上映时间

3.页面分析

在这里插入图片描述

我们通过分析页面,发现关于一部电影的信息,都在dd标签中。
电影序号在<i class="board-index board-index-1">
电影名称在title=之后
图像链接在img src=之后
主演在class=star之后
上映时间在class="releasetime"之后

4.正则表达式

用每个信息之前的节点来开头,比如用class="board当作爬取电影序号的开头
.*?来匹配开头与节点信息之间的内容,用来非贪婪匹配
对于节点信息用(.*?)来匹配,其后写网页源代码中后面的代码。比如电影序号后的代码是</i>,就写(.*?)</i>。电影名称后的代码为 class="image-link,我们就写/sclass="image-link/s是匹配空格,class="image-link为其后的代码,我们就用(.*?)/sclass="image-link来匹配
最终代码如下

<dd>.*?board-index.*?>(.*?)</i>.*?title="(.*?)"\sclass="image-link".*?data-src="(.*?)"\salt.*?class="star">\s*(.*?)\s*</p>.*?releasetime">(.*?)</p>

因为我们要爬取整个页面所有电影,所以要多次匹配
所以我们用re.compile()将正则表达式编译成一个正则表达式对象,然后用re.findall()爬取。

5.最终完整代码

import requests
import re
import pandas as pd
import time
def get_html(url):
    headers = {
    
    
    'User-Agent': 'Mozilla/5.0 (MSIE 10.0; Windows NT 6.1; Trident/5.0)'
    }
    response = requests.get(url,headers = headers)
    time.sleep(0.2)
    if response.status_code == 200:
        return response.text
    return None

def get_infomation(html):
    str = re.compile('<dd>.*?board-index.*?>(.*?)</i>.*?title="(.*?)"\sclass="image-link".*?data-src="(.*?)"\salt.*?class="star">\s*(.*?)\s*</p>.*?releasetime">(.*?)</p>',re.S)
    items = re.findall(str,html)
    index,name,img,actor,data = [],[],[],[],[]
    for i in items:
        index.append(i[0]),
        name.append(i[1]),
        img.append(i[2]),
        actor.append(i[3]),
        data.append(i[4])
    tammol_movie = pd.DataFrame(
        data={
    
    
            '电影名称':name,
            '图像链接':img,
            '演员':actor,
            '放映日期':data
        },
        index=index
    )
    print(tammol_movie)
def main():
    #for i in range(0,10):
    url = 'https://maoyan.com/board/4/'#/?offset = '+ str(10*i)
    html = get_html(url)
    get_infomation(html)
main()

更多关于正则表达式的内容,可看崔庆才先生的《python3网络爬虫开发实战》一书

猜你喜欢

转载自blog.csdn.net/sgsdsdd/article/details/115259630
今日推荐