工具使用xpath,下载地址是:https://download.csdn.net/download/qq_37504771/10495657,只要一个积分
安装方法:在浏览器输入chrome://extensions/,将文件解压拖到这里面,然后右上角就有这个插件。
这里我们取猫眼电影网爬取top100的页面信息并解析出我们需要的列表,用文件把电影信息列表存储起来;
存储json格式列表我们需要先创建一个txt文件,保存其路径备用。
import requests #导入http请求库
from lxml import etree #导入网页解析库import json
import time
#用一个类完成所有操作
class MaoYan(object):
'''下载猫眼电影top100信息'''
def __init__(self):
#为了不被网站认出这是个爬虫,初始化定义一个请求头,在浏览器输入about:version查看自己的版本
self.header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'}
def getOnePage(self,url):
#返回请求发过去的响应 必须使用request头,不然爬不上去
html = requests.get(url,headers= self.header) #请求网页回应,这边参数传递请求头
return html.text #返回文本形式
def parseOnePage(self,text):
'''解析这一个网页,使用xPath提取代码'''
html = etree.HTML(text) #解析这个HTML
name = html.xpath('//p[@class="name"]//text()') #将p字段的name属性提取出来
star = html.xpath('//p[@class="star"]//text()') #将p字段的star属性提取出来
print(name) #打印电影名字
print(star) #打印电影演员
print("-----电影列表信息------")
#创建列表生成器 ,用这个表现数据不占内存
for item in range(len(name)):
#使用json数据流,将这些名字在下面打印并写入文件
yield {
'name':name[item],
'star':star[item].strip() #调用strip()方法防止中文乱码
}
@staticmethod #静态类方法
def writeFile(content): #将json数据格式写入之前准备存储的文件路径
with open(r'G:\TestDemo\venv\网络爬虫学习\List.txt', 'a', encoding='utf-8') as f: #这样追加参数防止乱码
f.write(json.dumps(content, ensure_ascii=False)+'\n')maoyan = MaoYan() # 实例化这个类
for offset in range(10): #我们提取10个页面信息
time.sleep(1) #每一秒发一次
#分割线,为了看清输出的列表信息
print("******************************************************************************************************************")
url = "http://maoyan.com/board/4?offset={}".format(offset*10) #提取结束一个页面,提取下一个,偏离值+10
html = maoyan.getOnePage(url) #网页信息
# print(html)
#迭代上面的列表生成器
text = maoyan.parseOnePage(html) #将解析的列表写入这个文本
for item in text:
maoyan.writeFile(item) #写到解析方法的路径里面
print(item)
#将网页的源码入到文件
path = r'G://TestDemo//venv//网络爬虫学习//MY.html'
with open(path, 'wb') as f:
f.write(html.encode())
f.close()