• 简单的爬虫


    一、使用python下载网页代码

    from requests_html import HTMLSession
    session = HTMLSession()
    r = session.get('https://movie.douban.com/subject/1292052/')
    print(r.text)

    二、提取网页中所需的内容

      2.1使用使用CSS 选择器 来提取网页中有价值的信息--例:爬取单个豆瓣网页

        先查看一段内容的代码,在代码上点击右键,选择 Copy -> Copy Selector (或者 Copy CSS Selector、复制 CSS 选择器),就能将这段内容对应的 CSS 选择器复制到剪贴板。

      

    from requests_html import HTMLSession
    session=HTMLSession()
    r=session.get('https://movie.douban.com/subject/1292052/')
    title=r.html.find('#content > h1 > span:nth-child(1)',first=True)
    # r.html.find() 接受一个 CSS 选择器(字符串形式)作为参数
    # 返回在网页中使用该选择器选中的内容。
    print(title.text)

       2.2 例:爬取多个豆瓣网页

     1 '''
     2 爬取多个豆瓣网页
     3 '''
     4 from requests_html import  HTMLSession
     5 
     6 links=['https://movie.douban.com/subject/1292052/',
     7       'https://movie.douban.com/subject/1962665/',
     8       'https://movie.douban.com/subject/26752088/'
     9       ]
    10 
    11 session=HTMLSession()
    12 for link in links:
    13     r=session.get(link)
    14     #r.html.render()
    15 
    16     title=r.html.find('#content > h1 > span:nth-child(1)',first=True)
    17     year=r.html.find('#content > h1 > span.year',first=True)
    18     print(title.text,year.text)

      2.3 例:爬取新浪财经股票的实时价格 多个

      

    '''
    例:爬取新浪财经股票的实时价格 多个
    '''
    from requests_html import  HTMLSession
    
    links=['http://stock.finance.sina.com.cn/usstock/quotes/aapl.html',
          'http://stock.finance.sina.com.cn/usstock/quotes/bidu.html',
          'http://stock.finance.sina.com.cn/usstock/quotes/msft.html'
          ]
    
    session=HTMLSession()
    for link in links:
        r=session.get(link)
        r.html.render()
    
        title=r.html.find('#hqPrice',first=True)
        print(title.text)

    三、存储格式化数据

    CSV格式

    Python 提供了标准库 csv 来读写 csv 数据。

    import csv
    
    file=open('movies.csv','w',newline='')
    csvwriter=csv.writer(file)
    
    csvwriter.writerow(['名称','年份'])
    
    csvwriter.writerow(['A','1992'])
    csvwriter.writerow(['B','1998'])
    csvwriter.writerow(['C','2010'])
    
    file.close()

    CSV格式:通常用来存储简单的数据,表格类型数据首选。并且可以使用Excel打开。

    名称,年份
    A,1992
    B,1998
    C,2010

    JSON格式:通常用来存储键值数据,一般情况下选择

    [{"名称":"A","年份":"1992"},{"名称":"B","年份":"1998"},{"名称":"C","年份":"2010"}]

    XML格式:存储非常复杂的数据格式,大多数情况下用不到。

    <0><名称>A<!--名称--><年份>1992<!--年份--><!--0--><1><名称>B<!--名称--><年份>1998<!--年份--><!--1--><2><名称>C<!--名称--><年份>2010<!--年份--><!--2-->

    将爬虫数据写入CSV文件

    from requests_html import HTMLSession
    import csv
    
    session=HTMLSession()
    file=open('movies.csv','w',newline='')
    csvwriter=csv.writer(file)
    csvwriter.writerow(['名称','年份'])
    
    links=['https://movie.douban.com/subject/1292052/',
           'https://movie.douban.com/subject/26752088/',
           'https://movie.douban.com/subject/1962665/']
    
    for link in links:
        r=session.get(link)
        title=r.html.find('#content > h1 > span:nth-child(1)',first=True)
        year=r.html.find('#content > h1 > span.year',first=True)
        csvwriter.writerow([title.text,year.text])
    
    file.close()

    四、例子

    简单地爬取百度新闻,并写入csv文件

    from requests_html import HTMLSession
    import csv
    
    session=HTMLSession()
    file=open('news_baidu.csv','w',newline='')
    csvwriter=csv.writer(file)
    csvwriter.writerow(['序号','新闻标题'])
    n=1
    ans_new_titles=[]
    
    r=session.get('https://news.baidu.com/')
    #r.html.render()
    title_1=r.html.find('#pane-news > div > ul > li.hdline0 > strong > a',first=True)
    csvwriter.writerow([n,title_1.text])
    n=n+1
    
    titles_baidu=r.html.find('#pane-news > ul:nth-child(n) > li.bold-item > a')
    ans_new_titles+=titles_baidu
    
    for title in ans_new_titles:
        csvwriter.writerow([n,title.text])
        n+=1
    file.close()

    位置:爬虫\create_file1

    爬取学习强国,失败,代码如下:

    from requests_html import HTMLSession
    import csv
    
    session=HTMLSession()
    file=open('news_xxqg.csv','w',newline='')
    csvwriter=csv.writer(file)
    csvwriter.writerow(['序号','新闻标题'])
    n=1
    ans_new_titles=[]
    
    r=session.get('https://www.xuexi.cn/')
    r.html.render()
    
    titles_xxqg=r.html.find('#Ckhjp4r149s000',first=True)
    ans_new_titles+=titles_xxqg
    
    for title in ans_new_titles:
        csvwriter.writerow([n,title.text])
        n+=1
    file.close()

    五、简单搜索引擎

    对存入的文件进行读取 

    import csv
    
    page_url=[]
    page_title=[]
    file=open('全站爬虫爬取百度ai.csv','r')
    infos=csv.reader(file)
    for info in infos:
        page_title.append(info[0])
        page_url.append(info[1])
    
    while True:
        keyword=input('请输入查询关键字,输入quit结束')
        if keyword=='quit':
            break
        for i in range(len(page_title)):
            if str(page_title[i]).find(keyword)>=0:
                print(page_url[i],page_title[i])
    file.close()
  • 相关阅读:
    std::bind 详解及参数解析
    c++ 静态类成员函数(static member function) vs 名字空间 (namespace)
    继续进发
    lua闭包
    Mysql按时间段分组查询来统计会员的个数
    linux安装配置sendmail实现邮件发送
    Javascript验证用户输入URL地址是否正确
    php返回json数据函数例子
    ArrayList与List对象用法与区别
    java 获取数组(二维数组)长度实例程序
  • 原文地址:https://www.cnblogs.com/start20180703/p/10362070.html
Copyright © 2020-2023  润新知