zoukankan      html  css  js  c++  java
  • python学习之爬虫

    python爬虫

    安装python包

    pip install requests

    并不是所有网站都可以使用爬虫爬取,部分重要网站都会有反爬措施,因此没那么号爬取。

    所以我们选择一些较为容易爬取的网站进行练习

    requests库内置方法

    • get(url)方法

      使用 requests.get发起请求,会返回response响应的数据。

    • text方法

      通过requests库的内置方法,得到响应数据的源码

    • content方法

      通过requests库的内置方法,得到响应数据的文本内容

    re库内置方法

    • findall方法

      通过正则表达式匹配所需内容。需要其中部分内容则可以使用括号扩起来,使用.*?即可

      re.S方法可以使用再findall内,可以使正则表达式匹配时忽略掉换行符

      # .匹配所有字符  *是表示前面的字符是0到无穷个
      
    • sub方法

      可以使用sub方法从已经拿到的数据中去掉脏数据

    下载图片或者视频都可以使用文件的方式来操作。设置二进制模式集合**

    实例:

    import requests
    import re
    
    data = requests.get("https://ishuo.cn/")    # 拿到网页的源码
    data = data.text
    
    # .匹配所有字符  *是表示前面的字符是0到无穷个
    res = re.findall("<li class="list_li">(.*?)</li>",data)   # 拿到网页中列表的全部数据
    res_dict = {}
    for i in res:
        title = re.findall("<a href="/subject/.*?">(.*?)</a>", i)[0]  # 拿到标题数据
        content = re.findall("<div class="content">(.*?)</div>", i)[0]   # 拿到文本数据
        res_dict[title] = content
    for i in res_dict.items():
        print(f"标题:{i[0]} 
    内容:{i[1]}
    ")
    

    选择其中一个网址爬取文字并做词频和词云分析,选择另一个网址爬取图片内容。

    # 爬取文字并做词频和词云分析
    import re
    import requests
    
    data = requests.get("http://www.haha56.net/xiaohua/gushi/")
    data.encoding = "gb2312"
    data = data.text
    
    url_list = re.findall("<dt><a href="(.*?.html)", data)  # 拿到url列表
    for url in url_list:            # 解析url
        data = requests.get(url)
        data.encoding = "gb2312"
        data = data.text
        title = re.findall("<div class="title">(.*?)</div>", data)[0] # 拿到标题
        data = re.findall("【1】 (.*?)&rdquo;&nbsp;</div>",data)   # 拿到文本数据
        content_list = ""
        for i in data:
            content_list += i   # 拼接文本
    
        # 开始词频分析
        import jieba
        content_list = jieba.lcut(content_list)
        word_dict = {}  # 声明词频字典
        for word in content_list:
            if len(word) == 1 or word == "ldquo" or word == "rdquo":      # 去掉脏数据
                continue
            if word not in word_dict:
                word_dict[word] = 1
            else:
                word_dict[word] += 1
    
        word_list = list(word_dict.items())     # 把字典中的键值对转成list类型
        def func(i):
            return i[1]
        word_list.sort(key=func)    # 排序
        word_list.reverse()
        for i in word_list[:10]:    # 输出前十名
            print(i)
    
        # 生成词云
        import wordcloud
        fdata = ""
        for i in word_list:
            fdata += i[0]+":"+str(i[1])+" "
    
        w = wordcloud.WordCloud(r"C:WindowsFontssimkai.ttf")
        w.generate(fdata)
        w.to_file(title+".png")
        break
    
    # 爬取图片内容
    import re
    import requests
    data = requests.get("https://www.doutula.com/")
    data = data.text
    # print(data)
    
    res = re.findall("<img referrerpolicy=.*?alt=".*?">",data)
    for i in res:
        title = re.findall("alt="(.*?)"", i)[0]  # 标题
        img_url = re.findall("data-original="(.*?)"",i)[0]   # 都是图片
        if title == "":
            title = str(img_url).split("/")[-1]
        data = requests.get(img_url)
        f = open(title+"."+str(img_url).split(".")[-1],"wb")
        f.write(data.content)
        print("拿到一张图片")
    
  • 相关阅读:
    Jsp数据交互
    java生成验证码
    http状态码
    Java设计模式之单例
    QQ数据库管理
    Mysql中的存储过程,事物
    mysql中约束的添加,修改,与删除
    mysql中定义存储过程
    Mysql中的子查询等操作
    数据库的简单操作
  • 原文地址:https://www.cnblogs.com/XuChengNotes/p/11227612.html
Copyright © 2011-2022 走看看