实验4.5:requests爬取文本
题目描述:利用爬虫库requests、正则表达式解析库re和纯文本txt完成编程任务,任务是爬取豆瓣排行榜的电影名称。本爬虫实验分为三个步骤:
(1)第一步数据爬取,通过requests爬取豆瓣排行榜的电影名称数据;本步骤实验说明如下:
爬取网址url=”https://movie.douban.com/chart”
浏览器用户代理”User-Agent”:”Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebkit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36 Edg/99.0.1150.39”
说明:不同机器安装的浏览器用户代理也不一样,需要打开网址后,通过F12键打开开发工具查看URL和User-Agent。
(2)第二步数据解析,通过正则表达式re解析豆瓣排行榜的电影名称数据;
本步骤解析数据参考正则表达式是:re.compile(’<a.*?nbg.*?title=”(.*?)”>’,re.S)
(3)第三步存储数据,通过纯文本存储豆瓣排行榜的电影名称数据。实验效果如图5所示。
图5
import requests
import re
#数据爬取
url="https://movie.douban.com/chart"
headers = {'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ' + \
'AppleWebKit/537.36 (KHTML, like Gecko) ' + \
'Chrome/99.0.4844.51 ' +\
'Safari/537.36 ' + \
'Edg/99.0.1150.39' }
response = requests.get(url=url,headers=headers)
#print(response)
text1 = response.text
#print(text1)
#数据解析
temp = re.compile('<a.*?nbg.*?title="(.*?)">',re.S)
count = re.findall(temp,text1)
#compile()与findall()一起使用,返回一个列表。
#print(count)
with open("douban.txt",'w',encoding='utf-8') as f:
for i in count:
f.write(i+'\n')
实验4.6:requests爬取图片
题目描述:利用爬虫库requests、html提取库beautifulsoup4(简称bs4)、html解析库lxml和urllib库完成编程任务,任务是爬取wallhaven网站上的壁纸图片。
(1)第一步数据爬取,通过requests爬取wallhaven的html数据;本步骤实验说明如下:
爬取网址url=”https://wallhaven.cc/search?q=id:711&sorting=random&ref=fp”
浏览器用户代理”User-Agent”:”Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebkit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Mobile Safari/537.36”
说明:不同机器安装的浏览器用户代理也不一样,需要打开网址后,通过F12键打开开发工具查看URL和User-Agent。
(2)第二步数据解析,通过html提取库beautifulsoup4和html解析库lxml提取并解析wallhaven的html数据,本步骤提取并解析数据参考方法是:
res=requests.get(url,headers=headers)
html=res.text
info=BeautifulSoup(html,”lxml”)
data=info.select(”#thumbs > section > ul > li > figure > img”)
(3)第三步存储数据,通过目录./spider_picture存储wallhaven网站上的壁纸图片。实验效果如图6所示。
图6
import requests
import urllib
import lxml
from bs4 import BeautifulSoup
url = 'https://wallhaven.cc/search?q=id:711&sorting=random&ref=fp'
header = {"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebkit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Mobile Safari/537.36"}
response = requests.get(url=url,headers=header)
html = response.text
info = BeautifulSoup(html,"lxml")
data = info.select("#thumbs > section > ul > li > figure > img")
#print(data)
list1 = []
for i in data:
list1.append(i.get("data-src"))
for j in list1:
pictureurl = j#j是网址
name = pictureurl.split("/")[-1]#name是最后的图片属性
response = requests.get(url=pictureurl,headers=header)
with open("./%s"%name, "wb") as f:
f.write(response.content)#按名称进行输出