• python库:bs4,BeautifulSoup库、Requests库


    Beautiful Soup

    https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/  Beautiful Soup 4.2.0 文档

    http://www.imooc.com/learn/712  视频课程:python遇见数据采集

    https://segmentfault.com/a/1190000005182997  PyQuery的使用方法

    import bs4
    print(bs4.__version__)    #当前版本是4.5.3  2017-4-6

    安装第三方库

    C:Python3scripts> python pip.exe install bs4 (引入第三方库 bs4 )——BeautifulSoup
    C:Python3scripts> python pip.exe install html5lib(引入第三方库 html5lib )——html5解析器,BeautifulSoup要用到

    打开本地的zzzzz.html文件,用 BeautifulSoup 解析

    from urllib import request
    from bs4 import BeautifulSoup
    import html5lib #html5解析器
    url='file:///C:/Python3/zz/zzzzz.html'
    resp = request.urlopen(url)
    html_doc = resp.read()
    soup = BeautifulSoup(html_doc,'lxml')#使用BeautifulSoup解析这段代码。'lxml'是解析器,除此之外还有'html.parser'、'xml'、'html5lib'等
    print(soup.prettify()) #按照标准的缩进格式的结构输出
    print(soup.title)#<title>标签
    print(soup.title.string)#<title>标签的文字
    
    print(soup.find(id="div111"))#查找id
    print(soup.find(id="div111").get_text())#获得标签内的所有文本内容文字
    
    print(soup.find("p", {"class": "p444"}))#查找<p class="p444"></p>标签 (这里的数据类型是 'bs4.element.Tag')
    print(soup.select('.p444'))#css选择器!!! (这里的数据类型是 list)
    for tag1 in soup.select('.p444'):
        print(tag1.string)
    
    print(soup.select('.div2 .p222'))#css选择器!!!
    print(soup.findAll("a"))#所有<a>标签
    for link in soup.findAll("a"):
        print(link.get("href"))
        print(link.string)

     使用正则

    import re
    data = soup.findAll("a",href=re.compile(r"baidu.com"))
    for tag22 in data:
        print(tag22.get("href"))

    练习1:解析一个网页

    由于win7上的编码解码问题搞不定,只好先使用标准html5的网页了。先拿廖大的python教程页做练习了,抓取左侧的目录

    # -*- coding: utf-8 -*-
    from urllib import request
    from bs4 import BeautifulSoup
    import html5lib #html5解析器
    
    url="http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000"
    resp = request.urlopen(url)
    html_doc = resp.read()
    
    #使用BeautifulSoup解析这段代码。'lxml'是解析器,除此之外还有'html.parser'、'xml'、'html5lib'等
    soup = BeautifulSoup(html_doc,'html.parser')
    #soup = BeautifulSoup(html_doc,'lxml')
    
    #按照标准的缩进格式的结构输出
    #print(soup.prettify())
    
    f = open("c:\Python3zz\0.txt","w+")
    for tag1 in soup.select('.x-sidebar-left-content li a'):
        #ss = tag1.get_text()
        ss = tag1.string
        ss2 = tag1.get("href")
    
        print(ss," --- ","http://www.liaoxuefeng.com",ss2)
        f.writelines(ss + " --- http://www.liaoxuefeng.com"+ss2+"
    ")#写入字符串
    
    f.close()

    2017-10-18:

    http://www.cnblogs.com/zhaof/p/6930955.html  一些解析器(Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python 会使用 Python默认的解析器,lxml 解析器更加强大,速度更快,推荐安装。)

    爬取 http://www.bootcdn.cn,获得一个字典( dict["包名称": star数值]  ),存入文本文件:  (一个想法,可以定期扒一次,例如3个月。再比对上次的dict记录,观察哪些项目的星升的比较快。比较受关注。)

    #python 3.6.0
    import requests     #2.18.4
    import bs4          #4.6.0
    import html5lib
    url = "http://www.bootcdn.cn/"
    #url = "http://www.bootcdn.cn/all/"
    
    
    headers = {'User-Agent': 'mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/61.0.3163.100 safari/537.36'}
    r = requests.get(url,headers=headers)
    # r=requests.get(url)
    print(r.encoding)   #获得编码
    print(r.status_code)    #获得状态码
    
    
    soup = bs4.BeautifulSoup(r.content.decode("utf-8"), "lxml")    #'lxml'是解析器,除此之外还有'html.parser'、'xml'、'html5lib'等
    #soup = bs4.BeautifulSoup(r.content, "html5lib")
    #aa = soup.decode("UTF-8", "ignore")
    #print(soup.prettify())#按照标准的缩进格式的结构输出
    
    
    #将数据解析成字典
    element = soup.select('.packages-list-container .row')
    starsList = {}
    for item in element:
        # print(item.select("h4.package-name"))
        # print(item.select(".package-extra-info span"))
        # print(item.h4.text)
        # print(item.span.text)
        starsList[item.h4.text]=item.span.text
    print(starsList)
    
    #将字典存入文本文件
    import time
    from datetime import datetime
    try:
        f = open('1.txt', 'a+')
        t2 = datetime.fromtimestamp(float(time.time()))
        f.write('
    '+str(t2))
        f.write('
    '+str(starsList))
    finally:
        if f:
            f.close()

    爬取廖雪峰的python教程:(就是先用bs4解析左边的目录列表,拿到链接,存为字典,并保存到文本文件中。再扒取。)  共123条,但我只扒下28个文件

    import requests
    import bs4
    import urllib
    url="http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000"
    #r = requests.get(url) #这里不加header,不让爬了
    headers = {'User-Agent': 'mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/61.0.3163.100 safari/537.36'}
    r = requests.get(url,headers=headers)
    soup = bs4.BeautifulSoup(r.content.decode("utf-8"), "lxml")
    
    # 生成字典,并保存在文本文件中
    f = open("c:\Python3\zz\liaoxuefeng\a.txt","w+")
    mylist = soup.select('#x-wiki-index .x-wiki-index-item')
    myhrefdict = {}
    for item in mylist:
        myhrefdict[item.text] = "https://www.liaoxuefeng.com" + item["href"]
        #print(item.text,item["href"])       #item.text   tag1.string     item["href"]   item.get("href")。
        #f.writelines(item.text + " --- http://www.liaoxuefeng.com"+item["href"]+"
    ")#写入字符串
    f.write(str(myhrefdict))
    f.close()
    
    # 爬取文件
    i = 0
    for key,val in myhrefdict.items():
        i += 1
        name = str(i) + '_' + key + '.html'
        link = val
        print(link,name)
        urllib.request.urlretrieve(link, 'liaoxuefeng\' + name)    # 提前要创建文件夹

    Requests库:  2017-10-30

    http://www.python-requests.org/en/master/api/  Requests库 API文档

    http://www.cnblogs.com/yan-lei/p/7445460.html  Python网络爬虫与信息提取

    requests.request()  构造一个请求,支撑以下各方法的基础方法
    requests.get(url, params=None, **kwargs) 获取HTML网页的主要方法,对应于HTTP的GET
    requests.head(url, **kwargs) 获取HTML网页头信息的方法,对应于HTTP的HEAD
    requests.post(url, data=None, json=None, **kwargs) 向HTML网页提交POST请求的方法,对应于HTTP的POST
    requests.put(url, data=None, **kwargs) 向HTML网页提交PUT请求的方法,对应于HTTP的PUT
    requests.patch(url, data=None, **kwargs) 向HTML网页提交局部修改请求,对应于HTTP的PATCH
    requests.delete(url, **kwargs) 向HTML页面提交删除请求,对应于HTTP的DELET

    代理:  2018-2-5

    import requests
    
    proxies = {
      "http": "http://10.10.1.10:3128",
      "https": "http://10.10.1.10:1080",
    }
    
    requests.get("http://aaa.com", proxies=proxies)

    https://www.v2ex.com/t/364904#reply0  带大家玩一个练手的数据采集(简洁版)

    http://www.xicidaili.com/nn/  高匿免费代理

    ...

  • 相关阅读:
    345. Reverse Vowels of a String(交换元音字母)(leetcode)
    633. Sum of Square Numbers(平方和)(leetcode)
    第七届蓝桥杯大赛个人赛省赛(软件类)真题8
    第七届蓝桥杯大赛个人赛省赛(软件类)真题6
    第七届蓝桥杯大赛个人赛省赛(软件类)真题5
    第七届蓝桥杯大赛个人赛省赛(软件类)真题4
    第七届蓝桥杯大赛个人赛省赛(软件类)真题3
    第七届蓝桥杯大赛个人赛省赛(软件类)真题2
    第七届蓝桥杯大赛个人赛省赛(软件类)真题1
    hdu 1087&1160 最长增序列问题
  • 原文地址:https://www.cnblogs.com/qq21270/p/6675682.html
Copyright © 2020-2023  润新知