Python爬虫抓取+分析+提取网页信息

工具使用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')



if __name__ == '__main__':
    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()

猜你喜欢

转载自blog.csdn.net/qq_37504771/article/details/80788394