猫眼电影是静态网页,并且不需要验证码,非常适合爬虫的入门练习,流程如下-通过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观察网页源代码
这里是排名信息,电影的排名前面是'>',所以使用'>'作为匹配的开头,作为结束
名称用'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函数休息一下,防止访问太频繁被限制访问.
结果如下: