import requests
import re
import json
import time
from requests.exceptions import RequestException
def get_one_page(url):
try:
headers = {
'accept': 'textml,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
}
re = requests.get(url, headers =headers)
if re.status_code ==200:
return re.text
return '页面无反应'
except RequestException:
return 'Request出现异常错误'
def parse_one_page(html):
pattern=re.compile('<div.*?class="pic">.*?>(.*?)</em>.*?src="(.*?)".*?class="hd".*?'
'href="(.*?)".*?class="title">(.*?)</span>.*?class="bd">.*?导演:(.*?) '
'(.*?)<br>(.*?) / (.*?) '
'/ (.*?)</p>''.*?class="star">.*?average">(.*?)</span>.*?<span.*?property'
'.*?<span>(.*?)</span>.*?class="inq">(.*?)</span>',re.S)
items=re.findall(pattern,html)
for item in items:
yield{
'电影排名:':item[0],
'电影图片链接':item[1],
'电影详细内容链接:':item[2],
'电影名称:':item[3],
'导演:':item[4],
'':item[5],
'上映日期:':item[6],
'国家:':item[7],
'类型:':item[8],
'电影评分:':item[9],
'评价人数:':item[10],
'简介:':item[11]
}
def write_to_file(content):
with open('D:\\daxue\\daerxia\\dashujucaiji\\zuoye\\作业1\\result(2).txt','a',encoding='utf-8')as f:
f.write(json.dumps(content,ensure_ascii=False)+'\n')
def main(offset):
url='https://movie.douban.com/top250?start='+str(offset)
html=get_one_page(url)
for item in parse_one_page(html):
print(item)
write_to_file(item)
if __name__=='__main__':
for i in range(25):
main(offset=i*25)
time.sleep(1)
# 必要的第三方库
import requests
import re
import json
import time
from requests.exceptions import RequestException
# 获取某一页内容的函数
def get_one_page(url):
# 尝试获取内容
try:
# 爬虫请求头,每个电脑不一样
headers = {
'accept': 'textml,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
}
# 根据网站,请求头获取内容
re = requests.get(url, headers =headers)
# 获取成功,返回页面内容信息
if re.status_code ==200:
return re.text
# 获取不成功,返回'页面无反应'
return '页面无反应'
# 尝试获取内容出现异常,类型网站404
except RequestException:
return 'Request出现异常错误'
# 解析页面内容的信息
def parse_one_page(html):
# 利用正则表达式获取特定信息
pattern=re.compile('<div.*?class="pic">.*?>(.*?)</em>.*?src="(.*?)".*?class="hd".*?'
'href="(.*?)".*?class="title">(.*?)</span>.*?class="bd">.*?导演:(.*?) '
'(.*?)<br>(.*?) / (.*?) '
'/ (.*?)</p>''.*?class="star">.*?average">(.*?)</span>.*?<span.*?property'
'.*?<span>(.*?)</span>.*?class="inq">(.*?)</span>',re.S)
# 查找所有符合正则表达式的信息,形成迭代器
items=re.findall(pattern,html)
# 循环迭代器内容
for item in items:
# 每一次循环中要获取的信息
yield{
'电影排名:':item[0],
'电影图片链接':item[1],
'电影详细内容链接:':item[2],
'电影名称:':item[3],
'导演:':item[4],
'':item[5],
'上映日期:':item[6],
'国家:':item[7],
'类型:':item[8],
'电影评分:':item[9],
'评价人数:':item[10],
'简介:':item[11]
}
# 将内容写入文件中
def write_to_file(content):
with open('D:\\daxue\\daerxia\\dashujucaiji\\zuoye\\作业1\\result(2).txt','a',encoding='utf-8')as f:
f.write(json.dumps(content,ensure_ascii=False)+'\n')
# 主函数,
def main(offset):
# 网站
url='https://movie.douban.com/top250?start='+str(offset)
html=get_one_page(url)
for item in parse_one_page(html):
print(item)
write_to_file(item)
# 开启代码运行,即调用主函数
if __name__=='__main__':
for i in range(25):
main(offset=i*25)
# 休眠,预防反爬虫
time.sleep(1)
如有用请采纳