爬取豆瓣电影top250(正则表达式)

进入https://movie.douban.com/top250?,查看网页源代码。查看HTML的标签,找一个最近的且能定位到电影信息的标签。<li>。然后找一个可以定位电影名或者年份前面的部分。

re.compile(r<li>.*?<span class="title">(?P<name>.*?)</span>.*?<p class="">
                    r.*?<br>(?P<year>.*?)&nbsp.*?,re.S)

利用正则finditer去找标记的内容name,year。如果直接去输出的话,会有一点小问题,这个网页年分前面是空白回车。此时输出的内容会多了一行。所以要进行修改

print(i.group(year).strip())

网页的第二页和第三页发现只是start多了25其他不变。这时我们做一个循环爬取网页全部代码保存起来。

for i in range(10):
    query = i*25
    url = fhttps://movie.douban.com/top250?start={query}&filter=
    head = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36 Edg/96.0.1054.43"
    }
    resp = requests.get(url, headers=head)
    #print(resp.text)
    abc = resp.text
    with open(top250.txt,a,encoding=utf-8) as f:
        print(abc,file=f)
    resp.close()

爬取网页的全部代码之后,利用上面的正则表达式规则进行筛选就行了。

完整代码:

import requests
import re
import csv
import os

for i in range(10):
    query = i*25
    url = fhttps://movie.douban.com/top250?start={query}&filter=
    head = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36 Edg/96.0.1054.43"
    }
    resp = requests.get(url, headers=head)
    #print(resp.text)
    abc = resp.text
    with open(top250.txt,a,encoding=utf-8) as f:
        print(abc,file=f)
    resp.close()

fp = open(top250.txt,encoding=utf-8)
c = fp.read()
fp.close()

page_contnet =c

patten = re.compile(r<li>.*?<span class="title">(?P<name>.*?)</span>.*?<p class="">
                    r.*?<br>(?P<year>.*?)&nbsp.*?,re.S)
result = patten.finditer(page_contnet)
f = open(doubantop250.csv,w)
csvwriter = csv.writer(f)

for i in result:
    dic = i.groupdict()
    dic[year]=dic[year].strip()
    csvwriter.writerow(dic.values())
f.close()
print(over)
经验分享 程序员 微信小程序 职场和发展