一、导入库
import requests(获取网页)
import urllib.request,urllib.error (制定URL,获取网页数据)
import re (正则表达式匹配)
from bs4 import BeautifulSoup(网页解析方法)
import xlwt(进行excel操作)
from lxml import etree(xpath匹配操作)
import time(可进行程序运行时的时间操作)
二、确定目标静态网站及想爬取的信息
假如我们需要爬取豆瓣电影top250的电影名称,图片和简介链接。我们需要清楚豆瓣网是否有检测爬虫的手段,会不会影响爬虫正常运行。
豆瓣电影top250网址可输入为:
baseurl="https://movie.douban.com/top250?start={}"
保存地址是:
savepath = “豆瓣电影.xls”
豆瓣是有反爬手段的所以我们需要加入代码:
headers={
"User-Agent": "xx"
}
头部信息可在浏览器中按F12,在Headers的Request Headers里查看,此为模拟浏览器登陆
三、对网页进行解析,爬取数据
网站里的250部电影发布在10页里,一页25部,以star=0开始第一页star=25开始第二页,代码可写为:
for i in range(0,10):
url=baseurl.format(i*25)
应用urllib库获取网页数据并进行解码操作:
equest=urllib.request.Request(url,headers=head)
response=urllib.request.urlopen(request)
html=response.read().decode("utf-8")
使用bs4库解析数据:
soup=BeautifulSoup(html,"html.parser")
因为是一下子获取整个网页的全部数据,所以咱需要将这些信息分为25份处理并将信息转为str格式:
for item in soup.find_all('div',class_="item"):
data=[]
item=str(item)
利用正则表达式爬取所需要的名称,图片和简介链接并将其保存在data里,结束第三步:
title=re.findall(re.compile(r'(.*?)'),item)[0].replace("/","")
data.append(title)
imgsrc=re.findall(re.compile(r',re.S),item)[0]
data.append(imgsrc)
link=re.findall(re.compile(r''),item)[0]
data.append(link)
注1.这里存的只是图片连接而非图片
注2.如若出现bug,可以考虑删掉某些[0]
注3.慎用sub
四、将数据保存在Excel中
确定存放位置,若位置里无该文件则会自动新建:
workbook = xlwt.Workbook(encoding="utf-8",style_compression=0) #样式压缩
worksheet = workbook.add_sheet('sheet1',cell_overwrite_ok=True) #允许覆盖
col=("标题","图片链接","内容链接")
for i in range(0,5):
worksheet.write(0,i,col[i]) #列命名
存放内容,将图片另存在文件夹内:
for i in range(0,250):
print("第%d条"%(i+1)) #看进行度
dat = data[i]
for j in range(0,5):
worksheet.write(i+1,j,dat[j]) #存数据
if j==0:
response = requests.get(data2[j])
with open(r'xx\{}.jpg'.format(i), 'wb')as f: # wb二进制写入
f.write(response.content) # 存为二进制数据流
workbook.save(savepath)
五、另粗略介绍xpath方法
获取网站信息:
resp = requests.get(url=url,headers=head)
应用lxml库解析获得的信息(str):
data=etree.HTML(resp.text)
应用xpath手段定位目标内容:
a=data.xpath('//img/@src')
之后的处理方式与前文相同