正则表达式抓取猫眼电影TOP100(思路详解)

思路如下:

先抓取单页,再用循环抓取全部。

import requests

#传入 URL ,通过 requests 库获取其 html 代码
def get_maoyan(url) :
    r=requests.get(url)
    r.raise_for_status()
    return r.text

def main():
    url='https://maoyan.com/board/4'
    html=get_maoyan(url)
    print(html)

if __name__ == '__main__':
    main()

这就返回了HTML代码

接下来再在上述代码上进行添加:

import requests
import re

#传入 URL ,通过 requests 库获取其 html 代码
def get_maoyan(url) :
    r=requests.get(url)
    r.raise_for_status()
    return r.text

#解析(parse)其 html 代码(用re,即正则表达式)
def parse_maoyan(html):
   pattern=re.compile('
.*?board-index.*?>(.*?).*?data-src="(.*?)".*?

(.*?)

.*?class="releasetime">(.*?)

.*?
',re.S) items=re.findall(pattern,html) print(items) def main(): url='https://maoyan.com/board/4' html=get_maoyan(url) parse_maoyan(html) if __name__ == '__main__': main()

这就得到了单页的数据(但没有进行换行,密密麻麻挤在一起显得很乱。)

response

若要看起来整洁,用迭代器yield{}

改其中两段代码:

def parse_maoyan(html):
   pattern=re.compile('
.*?board-index.*?>(.*?).*?data-src="(.*?)".*?

(.*?)

.*?class="releasetime">(.*?)

.*?
',re.S) items=re.findall(pattern,html) for item in items: yield{ '编号':item[0], '海报链接': item[1], '电影名':item[2], '主演':item[3], '上映时间':item[4] } def main(): url='https://maoyan.com/board/4' html=get_maoyan(url) for item in parse_maoyan(html): print(item)
response简洁多了

接下来还有一个写入文件,和循环抓取多页。

写入文件即用with open() as f:的方法:

def write_file(content)   #content(内容)即由前面的一个个item组成
     with open('maoyan.txt','w') as f:
        f.write(json.dumps(content, ensure_ascii=False) + '\n')
        f.close()

为何要加ensure_ascii=False,请点击
json.dumps的作用是将item的字典形式转化成字符串形式

循环抓取多页,总代码如下:

import requests
import re
import json

#传入 URL ,通过 requests 库获取其 html 代码
def get_maoyan(url) :
    r=requests.get(url)
    r.raise_for_status()
    return r.text

#解析(parse)其 html 代码(用re,即正则表达式)
def parse_maoyan(html):
   pattern=re.compile('
.*?board-index.*?>(.*?).*?data-src="(.*?)".*?

(.*?)

.*?class="releasetime">(.*?)

.*?
',re.S) items=re.findall(pattern,html) for item in items: yield{ '编号':item[0], '海报链接': item[1], '电影名':item[2], '主演':item[3], '上映时间':item[4] } def write_file(content) #content(内容)即由前面的一个个item组成 with open('maoyan.txt','w') as f: f.write(json.dumps(content, ensure_ascii=False) + '\n') f.close() def main(offset): url='https://maoyan.com/board/4?offset=' + str=(offset) html=get_maoyan(url) for item in parse_maoyan(html): print(item) write_file(item) if __name__ == '__main__': for i in range(10): main(i*10)

最后得出100个结果:

正则表达式抓取猫眼电影TOP100(思路详解)_第4张图片

你可能感兴趣的:(正则表达式抓取猫眼电影TOP100(思路详解))