用正则表达式爬取猫眼电影top100,具体内容如下
#!/usr/bin/python
# -*- coding: utf-8 -*-
import json # 快速导入此模块:鼠标先点到要导入的函数处,再Alt + Enter进行选择
from multiprocessing.pool import Pool #引入进程池
import requests
import re
import csv
from requests.exceptions import RequestException #引入异常
## 正确保存,无丢失
# 请求一个页面返回响应内容
#以《霸王别姬》为列,右击—查看元素—会显示一个网页信息
def get_one_page(url,offset):
try:
response=requests.get(url=url,params={"offset":offset})
if response.status_code==200: #由状态码判断返回结果,200表示请求成功,300,500表出错
return response.text #返回网页内容
else:return None
except RequestException as e:
return None
# 解析一个页面
def parse_one_page(html):
pattern = ('
.*?board-index.*?>(\d+).*?data-src="(.*?)".*?name">+ '.*?>(.*?)
.*?star">(.*?).*?releasetime">(.*?)'+ '.*?integer">(.*?).*?fraction">(.*?).*?
')#写个正则,匹配所有结果。这里由上面的网页相应内容写
开头,.*?匹配任意字符穿 board-index匹配标识符,类名,# \d 表数字即排名,'+'表示匹配至少一个可多个数字,右边结束符
#“?”,问号表示 非贪婪匹配,就是一旦匹配到就不在继续往后面尝试。
#而\(和\)分别表示匹配一个“(”和“)”
# re.S匹配多行
regex = re.compile(pattern,re.S) #一个方法,通过一个正则表达式字符串编译生成一个正则表达式对象,re.S 匹配任意字符
items = regex.findall(html) #以列表形式返回全部能匹配的子串. eg: re.findall(pattern, string[, flags])
for item in items: #将结果以字典形式返回,键值对
yield{ #把这个方法变成一个生成器