直接上代码
import requests
import re
import json
import time
#传入偏移量返回指定网页文本
def make_url(offset):
url='http://maoyan.com/board/4?offset='+str(offset*10)
#print(url)
header={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'
}
try:
response=requests.get(url,headers=header)
#先判断返回的状态码
if response.status_code==200:
return response.text
else:
return None
except:
return None
#用正则匹配网页目标内容
def crawl(pure_text):
pattern='<img data-src="(.*?)".*?<p class="name.*?title="(.*?)".*?上映时间:(\d{4}-\d{2}-\d{2}).*?<p class="score.*?integer">(.*?)<.*?fraction">(\d)<'
result=re.findall(pattern,pure_text,re.S)
for item in result:
#这里使用生成器,每次生成一个电影
yield {
'image':item[0],
'title':item[1],
'date':item[2],
'score':item[3]+item[4]
}
#将匹配到的内容写入文本里
def write_file(content):
#写入模式选择a即为追加,w为覆盖
with open('maoyan.txt','a',encoding='utf-8') as f:
#print(type(json.dumps(content)))
f.write(json.dumps(content,ensure_ascii=False)+'\n')
#执行函数:爬取+写入
def main(i):
for item in crawl(make_url(i)):
print(item)
write_file(item)
if __name__=='__main__':
#这里的i为偏移量
for i in range(10):
main(i)
time.sleep(1)
本身难度不大,但我在代码规范和函数封装方面加深了认识。