最近学习了 html5 相关的网页标签的基础知识,这个对beautiful soup的应用理解有很多的帮助,于是重新整理了之前的代码。
有兴趣的可以参考。
import os
import requests
from bs4 import BeautifulSoup
file_path = 'D:\python3.6\scrapy\maoyan'
# 定义文件夹,方便后续check文件夹是否存在
file_name = 'maoyan.txt'
# 自定义文件名称
file = file_path+'\\'+file_name
# 创建文件全地址,方便后续引用
url = "http://maoyan.com/board/4"
# 获取url的开始页
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"}
if os.path.exists(file):
# 如果文件存在,就在程序运行开始头指针开始编辑,即清空原有内容;
# 如果文件不存在,就创建一个新文件
with open(file, 'w', encoding='utf-8') as f:
# 打开目标文件夹中的文件
f.truncate()
#清空文件内容,注意:仅当以 "r+" "rb+" "w" "wb" "wb+"等以可写模式打开的文件才可以执行该功能
def get_all_pages(start):
# 自定义获取所有目标pages页的内容的函数
pages=[]
#定义空列表,加载获取的page内容
for n in range(0,100,10):
# 确认offset的步进值,注意把int的n转换为str
# 遍历所有的url,并获取每一页page的目标内容
if n==0:
url=start
else:
url=start+'?offset='+str(n)
r = requests.get(url, headers=headers)
soup = BeautifulSoup(r.content, 'lxml')
page= soup.find_all(name='dd')
# 将取该gage的所有dd节点的内容转换为soup属性
pages.extend(page)
# 利用extend方法扩展pages list内容
return pages
# 返回所有pages list内容
text = get_all_pages(url)
for film in text:
# 遍历列表 text中的所有元素,也就是每个dd节点内容
# 这个for循环应该优化成 自定义函数形式;
dict ={}
# 创建空dict,用来存放film信息
dict['Index']=film.i.string
# 选取第1个i节点标签的的string值,即film的排行值,并存入字典dict中
dict['name']=film.a.attrs['title']
# 选取第1个a节点标签的title属性的名称,即film的名称,并存入字典dict中
dict['star']=film.find(name='p',attrs={'class': 'star'}).string.strip()
# 选取第1个节点标签名称为p,且class属性名称为star的string值,并利用strip方法去除文本的前后的空格或者换行,并存入字典dict中
time=film.find(name='p',attrs={'class': 'releasetime'}).string.strip()
dict['releasetime']=time[5:15]
# 选取第1个节点标签名称为p,且class属性名称为releasetime的string值,
# 并利用strip方法去除文本的前后的空格或者换行,并存入字典dict中
sco1=film.find(name='i',attrs={'class': 'integer'}).string
sco2=film.find(name='i',attrs={'class': 'fraction'}).string
# 选取第1个节点标签名称为i,且class属性名称为integer或者fraction的string值
dict['score']=sco1+sco2
# 存入score值
print(dict)
# 检查dict是否为目标输出内容
with open(file, 'a+', encoding='utf-8') as f:
# 以 a+ 方式打开目标file文件,
# 如果该文件已存在,文件指针将会放在文件的结尾。
# 文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
f.write(str(dict)+'\n')
# 注意添加 换行符 '\n',实现每个dict自动换行写入txt中
print('抓取完毕')
猫眼电影TOP100榜单中的抓取目标dd节点内容样式参考:
1
9.6