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列表

  • 相关阅读:
    Postgresql HStore 插件试用小结
    postgres-xl 安装与部署 【异常处理】ERROR: could not open file (null)/STDIN_***_0 for write, No such file or directory
    GPDB 5.x PSQL Quick Reference
    postgresql 数据库schema 复制
    hive 打印日志
    gp与 pg 查询进程
    jquery table 发送两次请求 解惑
    python 字符串拼接效率打脸帖
    postgresql 日期类型处理实践
    IBM Rational Rose软件下载以及全破解方法
  • 原文地址:https://www.cnblogs.com/lightmao/p/4786979.html
Copyright © 2011-2022 走看看