本文代码参考了崔庆才先生的视频教学,此篇仅作为自己的学习记录。
import requests # 爬取网站
from requests.exceptions import RequestException #报错处理
import random # header选择
import re # 清洗数据
import pandas as pd # 清洗后的数据保存到excel
def get_one_page(url, header):
"""
获取网页信息
:param url: 接收爬取的网址的参数
:param header: 接收模拟头文件参数
:return:
"""
try:
response = requests.get(url, headers=header)
if response.status_code == 200:
return response.text
return None
except RequestException:
return None
def parse_one_page(html):
"""
清洗数据
:param html: 接收数据的参数
:return:
"""
# 用re模块,正则表达式清晰数据
pattern = re.compile('
.*?board-index.*?(\d+).*?data-src="(.*?)".*?name">(.*?).*?star">(.*?).*?releasetime">(.*?)'
+'.*?integer">(.*?).*?fraction">(.*?).*?', re.S)
items = re.findall(pattern, html)
# 将元组数据转换成字典
for item in items:
yield {
"index": item[0],
"image": item[1],
"title": item[2],
"actor": item[3].strip()[3:],
"time": item[4].strip()[5:],
"score": item[5]+item[6]
}
def write_to_excel(content):
"""
:param content: 接收数据列表参数
:return:
"""
# 将数据转换成DataFrame
df = pd.DataFrame(content)
# 将数据保存到excel
df.to_excel("maoyan_top100.xlsx", index=False)
def main():
# 需要爬取的网址
url = "http://maoyan.com/board/4"
# 模拟多个浏览器通过网站反爬取策略
agent_01 = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1"
agent_02 = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0"
# 创建列表,随机选择浏览器
agent_list = [agent_01, agent_02]
agent_value = random.choice(agent_list)
print(agent_value)
# 创建header
header = {"User-Agent": agent_value,
"Accept-Language": "zh-CN,zh;q=0.9"
}
html = get_one_page(url, header)
#创建列表用于接收清洗的数据字典
content = []
for item in parse_one_page(html):
content.append(item)
write_to_excel(content)
if __name__ == '__main__':
main()