import requests
import re
import json
import datetime
import time
def get_one_page(url):
#获取网页
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
response = requests.get(url,headers=headers,)
#此处一定要加一个headers=headers来模拟浏览器发送请求
if response.status_code==200:
return response.text
return None
# main()
def parse_one_page(html):
#使用正则表达式抓取网页信息
pattern = re.compile('.*?board-index.*?>(.*?).*?data-src="(.*?)".*?name.*?}">'
'(.*?).*?">(.*?).*?">(.*?).*?integer">(.*?).*?">(.*?)',re.S)
items = re.findall(pattern,html)
for item in items:
yield {
'index':item[0],
'img':item[1],
'title':item[2],
'actor':item[3].strip()[3:] if len(item[3])>3 else '',
'time':item[4].strip()[5:] if len(item[4])>5 else '',
'score':item[5].strip()+item[6].strip()
}
#迭代生成器,相当于依次生成了一个列表
# dict = {
# 'index':item[0],
# 'img':item[1],
# 'title':item[2],
# 'actor':item[3].strip()[3:] if len(item[3])>3 else '',
# 'time':item[4].strip()[5:] if len(item[4])>5 else '',
# 'score':item[5].strip()+item[6].strip()
# }
# print(dict)
# print(item)
def write_to_file(context):
with open('result.txt','a',encoding='utf-8') as f:
#以附加模式打开文件result.txt
f.write(json.dumps(context,ensure_ascii=False)+'\n'+str(datetime.datetime.now()))
'''json.dumps,将文件装换为json格式写入,ensure_ascii=False保证输出的结果是中文形式而不是Unicode编码,
末尾添加爬取时系统时间 '''
def main(offset):
#设置形参offset
url = 'http://maoyan.com/board/4?offset='+str(offset)
html = get_one_page(url)
# print(html)
for item in parse_one_page(html):
print(item)
write_to_file(item)
if __name__ == '__main__':
for i in range(10):
#传入offset参数
main(offset = i*10)
time.sleep(1)
代码参考至网络爬虫开发实战--崔庆才