• spider(一)


    此爬虫内容无架构:

    1.URL管理器:用集合,mysql表,缓存等

    2.网页下载器:实现网页下载,

      urllib2:官方基础模块 

      requests:三方的(更强):伪装成浏览器访问,代理登录,https加密访问等

    3.页面解析器:

      正则

      html.parser解析器模块

      lxml 解析器

    1 soup = BeautifulSoup(html,"lxml")
    2 
    3 print soup.a
    4 print "+++"
    5 print soup.a.string
    6 print "+++"
    7 print type(soup.a.string)   # <class 'bs4.element.NavigableString'>

    第一行:将 html.text 用 lxml 解析,后赋值给soup变量

    第三行:打印出搜索到的第一个 a 标签(即a节点)

    第五行:打印出 a 标签内的文字。

    获取标签 dl 所有的直接子节点:
    1
    for i in soup.dl.contents: 2 print i 3 print "++++++++++++++++"
    # soup.dl.contents  :返回其下所有节点(列表方式)
    # soup.dl.children  :遍历才能获得内容
    
    
    获取节点的内容:用 soup.dl.strings
    1 for string in soup.dl.strings:  
    2       print repr(string)

    查找内容:

    1 print soup.find_all('dt')  #返回列表,里面包括了所有的 dt 标签
    2 print soup.select("dt")    #同上,,[<dt>Mutation ID</dt>, <dt>Gene name</dt>, <dt>Remark</dt>, <dt>Recurrent</dt>, <dt>Drug resistance</dt>]
    3 print soup.select(".inline > dd")  #精准定位,查找 dd 标签

        print soup.select("dt").get_text()  # AttributeError: 'list' object has no attribute 'get_text' 

    用 get_text() 方法,获取里面的文字。

    1 for dt in soup.select(".inline > dt"):
    2     print dt.get_text()
    3     print "++++++++++++++++++" #每获取一个 dt 里面的文字,打印一次这行,结果如下:
    1 Mutation ID
    2 ++++++++++++++++++
    3 Gene name
    4 ++++++++++++++++++
    5 AA mutation
    6 ++++++++++++++++++
    显示搜索对象下所有的文字:
    1
    for dt in soup.select(".inline"): 2 print dt.get_text() 3 print '**********************' # 会在显示完 .inline 下面 所有的递归子标签里的文字后,打印一次本行。本例中只打印了一次。也就是本遍历值遍历了一个,已验证

    其他关于 find_all() 和 select() 

     1 soup.find_all('a') # 找到所有 a 标签,遍历取出
     2 soup.find_all(['a','b']) #任意匹配一个即可返回,
     3 soup.find_all(id = "...") #根据 id 号码查找
     4 soup.find_all("a",class_="...") #查找固定 class 的 a 标签
     5 soup.find_all("a",limit=2) # 限制搜索到的 a 标签的个数,只要前两个
     6 soup.find_all("p",recursive=False) # 只搜索 返回直接子节点。
     7 
     8 soup.select("a") #搜索所有 a 标签
     9 soup.select("#idname") # 根据 id 名搜索
    10 soup.select(".classname") # 根据 class 搜索
    11 soup.select(".classname > p > a > ...") # 精准搜索
    12 soup.select("p a[class="..."]") # 搜索 p 标签下的 class为...的 a 标签
    13 
    14 node.get_text()  # 获取节点的文字
    15 .select(a[href='...']) # 获取节点的 href 属性
    16 node.name # 获取节点的 名字
  • 相关阅读:
    工作总结06
    工作总结05
    工作总结04
    站立会议01
    团队项目估算
    团队项目计划会议
    团队需求分析视频
    团队介绍
    团队项目计划会议01
    电梯演讲
  • 原文地址:https://www.cnblogs.com/li-20151130/p/7715327.html
Copyright © 2020-2023  润新知