zoukankan      html  css  js  c++  java
  • 小白爬虫综合项目1

    项目1:搜狗知乎,爬取指定存储上一级目录的名字,以及存储爬取的页码

    项目2:爬取某用户的豆瓣网的个人主页页面数据

    项目3:goubanjia应用爬取ip这个关键词的页面

    项目4: 爬取糗事百科首页的图片&&升级

    项目5:爬取段子网

    项目6:爬取古诗文网的三国这篇小说

    项目7:selenium

    项目8:豆瓣电影分类排行榜==>喜剧片

    项目1:搜狗知乎,爬取指定存储上一级目录的名字,以及存储爬取的页码

    #爬取前三页数据
    import requests
    import os
    file_name=input('请输入一个文件名:')
    #创建一个文件夹
    if not os.path.exists(f'./{file_name}'):
        os.mkdir(f'./{file_name}')
    word=input('enter a search word:')
    #动态指定页码的范围
    start_pageNum=int(input('enter a start pageNum'))
    end_pageNum=int(input('enter a end pageNum'))
    
    #自定义请求头信息
    headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
    }
    url='https://www.sogou.com/sogou'
    for page in range(start_pageNum,end_pageNum+1):
        params={
            'query':word,
            'page':page,
            'ie':'utf-8',
            'insite':'zhihu.com'
        }
        response=requests.get(url=url,params=params,headers=headers)
        #获取响应中的页面数据(指定页码(page))
        page_text=response.text
        
        #进行持久化存储
        fileName=word+str(page)+'.html'
        filePath=f'./{file_name}/'+fileName
        with open(filePath,'w',encoding='utf-8')as fp:
            fp.write(page_text)
            print('第%d页数据写入成功'%page)

    项目2:爬取某用户的豆瓣网的个人主页页面数据

    import requests
    
    session=requests.session()
    #1.发起登录请求:将cookie获取,且存储到session对象中
    login_url='https://accounts.douban.com/j/mobile/login/basic'
    data={
        'ck': '',
        'name': '17862982790',
        'password': 'spc121314',
        'remember': 'false',
        'ticket': '',
    }
    
    #2.自定义请求头信息
    headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
    }
    
    #3.使用session发起post 请求获取cookie,我们不需要响应页面的数据,因此不需要获取
    login_response = session.post(url=login_url,data=data,headers=headers)
    
    #4.找到个人主页对应的url,对个人主页发起请求(session(cookie)),获取响应页面数据
    url='https://www.douban.com/people/198409299/'
    response=session.get(url=url,headers=headers)
    page_text=response.text
    
    with open('./douban110.html','w',encoding='utf-8') as fp:
        fp.write(page_text)

     项目3:goubanjia应用爬取ip这个关键词的页面

    import requests
    url = 'https://www.baidu.com/s?wd=ip&ie=utf-8'
    
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
    }
    
    #将代理ip封装到字典
    proxy = {
        'http':'39.137.77.66:8080'
    }
    #更换网路IP
    response=requests.get(url=url,proxies=proxy,headers=headers)
    
    with open('./daili.html','w',encoding='utf-8')as fp:
        fp.write(response.text)

     项目4: 爬取糗事百科首页的图片

    import os
    import requests
    import re
    #1.指定url
    url='https://www.qiushibaike.com/pic/'
    
    #2.自定义请求头信息
    headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
    }
    #3.发起请求
    response=requests.get(url=url,headers=headers)
    #4.获取页面数据
    page_text=response.text
    # 5.数据解析(该列表中存储的就是当前页面源码中所有的图片链接)
    img_list=re.findall('<div class="thumb">.*?<img src="(.*?)".*?>.*?</div>',page_text,re.S)
    # print(img_list)
    
    #创建一个存储图片数据的文件夹
    if not os.path.exists('./imgs'):
        os.mkdir('imgs')
    
    for url in img_list:
        img_url='https:'+url
        img_data=requests.get(url=img_url,headers=headers).content     #请求图片
        imgName=url.split('/')[-1]
        imgPath='imgs/'+imgName
        with open(imgPath,'wb') as fp:
            fp.write(img_data)
            print(imgName+'写入成功')

    升级指定爬取:思考可不可以将爬取到的图片进行分成第几页处理

    import os
    import requests
    import re
    
    #创建一个存储图片数据的文件夹
    file_name=input('请输入一个文件名:')
    #创建一个文件夹
    if not os.path.exists(f'./{file_name}'):
        os.mkdir(f'./{file_name}')
    #动态指定页码的范围
    start_pageNum=int(input('enter a start pageNum'))
    end_pageNum=int(input('enter a end pageNum'))
    
    #1.指定url
    url='https://www.qiushibaike.com/pic/'
    
    for page in range(start_pageNum,end_pageNum+1):
        #https://www.qiushibaike.com/pic/page/6/?s=5204493
    
        url=f'https://www.qiushibaike.com/pic/page/{page}/?s=5204493'
        #2.自定义请求头信息
        headers={
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
        }
        #3.发起请求
        response=requests.get(url=url,headers=headers)
        #4.获取页面数据
        page_text=response.text
        # 5.数据解析(该列表中存储的就是当前页面源码中所有的图片链接)
        img_list=re.findall('<div class="thumb">.*?<img src="(.*?)".*?>.*?</div>',page_text,re.S)
        # print(img_list)
    
        for url in img_list:
            img_url='https:'+url
            img_data=requests.get(url=img_url,headers=headers).content     #请求图片
            imgName=url.split('/')[-1]
            imgPath=f'./{file_name}/'+imgName
            with open(imgPath,'wb') as fp:
                fp.write(img_data)
                print(imgName+'写入成功')

     项目5:爬取段子网

    with方式:

    import requests
    from lxml import etree
    
    #1.指定url
    url='https://ishuo.cn/'
    # 2.发起请求
    headers={
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
    }
    response=requests.get(url=url,headers=headers)
    #3.获取页面内容
    page_text=response.text
    #4.数据解析
    tree=etree.HTML(page_text)
    #获取所有的li标签(段子内容和标题都被包含在li标签中)
    li_list=tree.xpath('//div[@id="list"]/ul/li')
    #注意:Element类型的对象可以继续调用xpath函数,对该对象表示的局部内容进行指定内容的解析
    with open('./段子2.txt','w',encoding='utf-8') as fp:
        for li in li_list:
            content=li.xpath('./div[@class="content"]/text()')[0]
            title=li.xpath('./div[@class="info"]/a/text()')[0]
            #5.持久化
            fp.write(title+":"+content+"
    
    ")
    print("数据写入成功")

    方式2:fp

    import requests
    from lxml import etree
    
    #1.指定url
    url='https://ishuo.cn/'
    # 2.发起请求
    headers={
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
    }
    response=requests.get(url=url,headers=headers)
    #3.获取页面内容
    page_text=response.text
    #4.数据解析
    tree=etree.HTML(page_text)
    #获取所有的li标签(段子内容和标题都被包含在li标签中)
    li_list=tree.xpath('//div[@id="list"]/ul/li')
    
    #注意:Element类型的对象可以继续调用xpath函数,对该对象表示的局部内容进行指定内容的解析
    fp = open('./段子3.txt','w',encoding='utf-8')
    for li in li_list:
        content=li.xpath('./div[@class="content"]/text()')[0]
        title=li.xpath('./div[@class="info"]/a/text()')[0]
        #5.持久化
        fp.write(title+":"+content+"
    
    ")
    print("数据写入成功")
    fp.close()

    项目6:爬取古诗文网的三国这篇小说

    import requests
    from bs4 import BeautifulSoup
    # 1.指定url
    url='http://www.shicimingju.com/book/sanguoyanyi.html'
    # 2.发起请求
    headers={
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
    }
    #根据url获取页面内容中指定的标题所对应的文章内容
    def get_content(url):
        content_page=requests.get(url=url,headers=headers).text
        soup=BeautifulSoup(content_page,'lxml')  #汤对象
        div=soup.find('div',class_='chapter_content')
        return div.text
    
    page_text=requests.get(url=url,headers=headers).text
    #数据解析
    soup=BeautifulSoup(page_text,'lxml')
    a_list=soup.select('.book-mulu > ul > li > a')
    # type(a_list[0])    
    # a_list
    fp=open('./sanguo.txt','w',encoding='utf-8')
    for a in a_list:
        title=a.string
        #获取章节的标题
        content_url='http://www.shicimingju.com'+a['href']
        #获取章节的内容
        print(content_url)
        content=get_content(content_url)
        fp.write(title+':'+content+"
    
    
    ")
        print('写完1条')
    print("写完")

    项目7:selenium

    我的google浏览器版本号是86,因此我选择最新的驱动2.46

    anaconda下安装selenium以及驱动安装: https://blog.csdn.net/hrainning/article/details/83684147

    将驱动和爬虫文件放在同一文件夹下面

    打开百度浏览器:

    #编码流程
    from selenium import webdriver
    #创建一个浏览器对象 executable_path驱动的路径
    bro=webdriver.Chrome(executable_path='./chromedriver')
    #get方法可以指定一个url,让浏览器进行请求
    bro.get('https://www.baidu.com')

     让百度执行一个词条的搜索:

    #编程流程:
    from selenium import webdriver
    from time import sleep
    #创建一个浏览器对象executable_path驱动的路径
    bro=webdriver.Chrome(executable_path='./chromedriver')
    #get方法可以指定一个url,让浏览器进行请求
    bro.get('https://www.baidu.com')
    sleep(1)
    #让百度进行指定词条的一个搜索
    text=bro.find_element_by_id('kw')    #定位到了text文本框
    text.send_keys('美元')               #表示向文本框中录入指定内容
    sleep(1)
    button=bro.find_element_by_id('su')
    button.click() #click表示的是点击操作
    sleep(3)
    bro.quit()   #关闭浏览器

     无头浏览器的处理:

    #编程流程:
    from selenium import webdriver
    bro=webdriver.PhantomJS(executable_path=r'C:UsersAdministratorDownloadsphantomjs-2.1.1-windowsinphantomjs.exe')
    
    #打开浏览器
    bro.get('https://www.baidu.com')
    #截屏
    bro.save_screenshot('./1.png')
    text=bro.find_element_by_id('kw')    #定位到了text文本框
    text.send_keys('日元')              #表示向文本框中录入指定内容
    
    bro.save_screenshot('./2.png')
    bro.quit()

     项目8:豆瓣电影分类排行榜==>喜剧片

    #编程流程:
    from selenium import webdriver
    from time import sleep
    bro=webdriver.PhantomJS(executable_path=r'C:UsersAdministratorDownloadsphantomjs-2.1.1-windowsinphantomjs.exe')
    url='https://movie.douban.com/typerank?type_name=%E5%96%9C%E5%89%A7%E7%89%87&type=24&interval_id=100:90&action='
    bro.get(url)
    sleep(1)
    #截屏
    bro.save_screenshot('./98.png')
    #编写jsdiamante:让页面中的滚轮向下滑动(底部)
    js='window.scrollTo(0,document.body.scrollHeight)'
    #如何让浏览器对象执行js代码
    bro.execute_script(js)
    sleep(1)
    #截屏
    bro.save_screenshot('./99.png')
    #获取加载数据后的页面:page_source获取浏览器当前的页面数据
    page_text=bro.page_source
    print(page_text)
  • 相关阅读:
    thinkphp中field的用法
    Thinkphp常用标签
    thinkphp框架的相关总结
    TP 控制器扩展_initialize方法实现原理
    Thinkphp中的volist标签(查询数据集(select方法)的结果输出)用法简介
    php中遍历数组的方法
    django自定义过滤器
    centos7 安装 mysql
    centos7 安装 nginx
    centos 服务器改名
  • 原文地址:https://www.cnblogs.com/studybrother/p/11073902.html
Copyright © 2011-2022 走看看