python爬虫实战-爬取猫眼电影榜单top100

猫眼电影是静态网页,并且不需要验证码,非常适合爬虫的入门练习,流程如下-通过url连接获取html内容,

在html中通过正则表达式,我们提取排名,名称,主演,上映时间等信息,格式如下

["9", "魂断蓝桥", "主演:费雯·丽,罗伯特·泰勒,露塞尔·沃特森", "上映时间:1940-05-17(美国)"]

import requests
import re
from bs4 import BeautifulSoup
import json
import time

requests和bs是爬虫需要的库,json是写入内容需要的库,time库防止猫眼反爬虫检测,加入休息时间,防止访问太频繁,re是正则表达式的库

def getHTMLText(url):
    headers = { 'User-Agent':'Mozilla/5.0(Macintosh;Intel Mac OS X 10_13_3)AppleWebKit/537.36(KHTML,like Gecko) Chrome/65.0.3325.162 Safari/537.36'}
    try:
        r = requests.get(url, headers = headers)
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ''

这是访问url得到html信息的函数,headers是修改头文件,防止被识别为爬虫,r.apparent_encoding是识别文件的编码方式,防止出现乱码

def write_to_file(content):
    with open('result.txt', 'a', encoding = 'utf-8') as f:
        print(type(json.dumps(content)))
        f.write(json.dumps(content, ensure_ascii=False)+'\n')
    

这是写入文件的函数,写完一行加入换行符

def parse_one_page(html):
    pattern = re.compile('
.*?>(.*?).*?title="(.*?)".*?

\s*(\S*)\s*

.*?releasetime">(.*?)

.*?
',re.S) items = re.findall(pattern,html) for item in items: print(item) write_to_file(item)

这是从html提取内容的函数,进入猫眼电影,ctrl+u观察网页源代码

python爬虫实战-爬取猫眼电影榜单top100_第1张图片可以看出来

为电影的标记符

这里是排名信息,电影的排名前面是'>',所以使用'>'作为匹配的开头,作为结束

名称用'title="'作为开头,后面加()进行匹配,直到出现符号'"'停止匹配,剩下的演员信息和上映时间的正则表达式原理类似




def main():
    with open('result.txt', 'w', encoding = 'utf-8') as f:
        f.truncate()
    for i in range(10):
        url = 'http://maoyan.com/board/4?offset=' + str(i*10)
        html = getHTMLText(url)
        parse_one_page(html)
        time.sleep(1)

最后的主函数内容,前两行是清空result文件的内容,防止重复填写,之后url是观察猫眼网站格式得到的,url = 'http://maoyan.com/board/4?offset=20就是第2页,url = 'http://maoyan.com/board/4?offset=30就是第三页,所以可以使用for循环来访问不同的页面进行内容提取,使用time函数休息一下,防止访问太频繁被限制访问.

结果如下:

python爬虫实战-爬取猫眼电影榜单top100_第2张图片



你可能感兴趣的:(python,爬虫,正则表达式)