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]} \n内容:{i[1]}\n")

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

# 爬取文字并做词频和词云分析
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:\Windows\Fonts\simkai.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("拿到一张图片")
posted @ 2019-07-22 18:27  正在学习的Barry  阅读(183)  评论(0编辑  收藏  举报
-->