目录
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】 (.*?)” </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("拿到一张图片")