zoukankan      html  css  js  c++  java
  • python爬虫实战

    任务:需要获取的内容:廖雪峰的官方网站中的python部分的标题和内容,之后获取整个python教程的内容,而不仅仅是这一个页面:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000

    1. html源码进行分析:

      可以发现Python教程位于class="x-content"Div下,且这样的div是独一无二的,所以可以通过这个线索获取文章的标题

      文章的内容位于class="x-wiki-content"Div下,同样可以通过这个线索获取文章的所有内容

    2. 获取文章的标题和内容:

      获取网页的源码,需要使用ruquests模块

      Import request

      Htmlsource=requests.get('http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000')

    3. 获取标题:
      1. 通过正则表达式进行匹配:

      title=re.findall('<h4>(.*?)</h4>',htmlsource.text,re.S)[0]

      b)使用xpath获取内容:

      匹配之前需要建立一个类似于树的东西:

      Selector=etree.HTML(htmlsource.text)

      selector.xpath('//div[@class="x-content"]/h4/text()')[0]

    4. 获取内容:
      1. 通过正则表达式进行匹配

      content=re.findall('class="x-wiki-content">(.*?)</div>',htmlsource.text,re.S)[0]

      这样获取的内容里面该div所有的内容,你可以通过re模块的sub方法将所有的标签换成空的字符,如:

      re.sub('<(.+?)>','',content,count=0)

      1. 通过xpath获取内容

      contentDiv= selector.xpath('//div[@class="x-wiki-content"]')

      print contentDiv[0].xpath('string(.)')

    5. 通过第二步,可以实现对一个网页中的内容进行提取,那么接下来我们就要对该网页中左侧的链接进行提取,以便根据提取到的url获取python教程的所有内容
    6. 对网站左侧的html源码进行分析并获取urllist

      可以需要获取的内容所处的位置大致是ul-->li-->a,经过查询发现class="uk-nav uk-nav-side"ul4,而我们需要获取的是第二个,所以Selector.xpath('//ul[@class="uk-nav uk-nav-side"]')[1]就是我们想要的ul

      另外href显示的是相对路径,与真正的网络地址相比缺少了域名和http,因此获取这个href之后,需要我们进一步的处理

      使用正则表达式是比较麻烦的,因此获取url可以使用更为简单的xpath

      Urllist=[]

      Linklist=Selector.xpath('//ul[@class="uk-nav uk-nav-side"]')[1]

      for i in linklist:

      urllist.append('http://www.liaoxuefeng.com' + i.xpath('a/@href')[0])

      这样就获取到了想要的urllist

    7. 根据这些url获取所有的titlecontent

      第一种方法是遍历urllist

      根据url获取titlecontent,然后可以将其写入到一个文件中,速度非常慢,可能需要1分多钟

      第二种方法是通过map()函数:

      传入一个爬虫函数(参数是url),和一个url列表

  • 相关阅读:
    Benelux Algorithm Programming Contest 2016 Preliminary K. Translators’ Dinner(思路)
    Benelux Algorithm Programming Contest 2016 Preliminary Target Practice
    Benelux Algorithm Programming Contest 2016 Preliminary I. Rock Band
    Benelux Algorithm Programming Contest 2016 Preliminary A. Block Game
    ICPC Northeastern European Regional Contest 2019 Apprentice Learning Trajectory
    ICPC Northeastern European Regional Contest 2019 Key Storage
    2018 ACM ICPC Asia Regional
    2018 ACM ICPC Asia Regional
    Mybatis入库出现异常后,如何捕捉异常
    优雅停止 SpringBoot 服务,拒绝 kill -9 暴力停止
  • 原文地址:https://www.cnblogs.com/lightmao/p/4786979.html
Copyright © 2011-2022 走看看