首先打开想要爬取的网站,找到想要爬取的内容
开始编写代码:
引入需要的模块
import os #引入系统模块
from bs4 import BeautifulSoup # 网页解析,获取数据
import re # 正则表达式,进行文字交配
import urllib.request, urllib.error # 制定URL,获取网页数据
import xlwt # 进行excel操作
import urllib.parse
爬取网页的大致框架
def main():
url = ''
datalist = getData(url)
savepath = r'./' #.表示保存在当前文件夹下
#2.解析数据
#3.保存数据
saveData(datalist,savepath)
def getData(url):
pass
def ask_URL(url):
pass
def saveData(datalist,savepath):
pass
if __name__ == '__main__':
main()
获取url
baseurl = ' '
输入你想要爬取的网址
因为当你这个网页是分页的,当你换页网站也会变,所以就定义一个基础的url后面用for循环来补全
def getData(baseurl):
datalist = []
for i in range(1,5): #选择爬取的页数,我这里是5页
url = baseurl + str(i)+'.html'
html = ask_URL(url) # 保存获取到的网页源码
print(html)
return datalist
对爬虫进行伪装
def ask_URL(url):
head = {
"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/101.0.4951.64 Mobile Safari/537.36 Edg/101.0.1210.47 "
}
request = urllib.request.Request(url,headers=head)
html = ''
try:
response = urllib.request.urlopen(request)
html = response.read().decode("gbk")
# print(html)
except urllib.error.URLError as e: # e表示一个urllib.URLError类型的变量
# hasattr()函数用于判断对象是否包含对应的属性
# 语法:
#
# hasattr(object, name)
# object - - 对象。
# name - - 字符串,属性名。
# 返回值
# 如果对象有该属性返回
# True,否则返回
# False。
if hasattr(e,"code"):
print(e.code)
if hasattr(e,'reason'):
print(e.reason)
return html
UA模拟浏览器访问网页数据
数据解析
点击F12进入开发者工具,选择你想要爬取的具体内容
用正则表达式进行提取操作
findContent = re.compile(r'target="_blank">(.*?)</a>')
然后用Beautifulsoup进行解析
def getData(baseurl):
datalist = []
for i in range(1,5):
url = baseurl + str(i)+'.html'
html = ask_URL(url) # 保存获取到的网页源码
# print(html)
#逐一解析
soup = BeautifulSoup(html,'html.parser') #解析html,用html解析器
for item in soup.find_all('div', class_="ej_bor"): #查找符合要求的字符串,形成列表
data = []#保存信息
item = str(item)
content = re.findall(findContent,item)
data.append(content)
datalist.append(data)
return datalist
存到列表中后进行保存操作
保存到Excel中
def saveData(datalist,savepath):
#申请50块空列表
a = 50
data = [None] * a
workbook = xlwt.Workbook(encoding="gbk",style_compression=0) # 创建workbook对象
worksheet = workbook.add_sheet('信息',cell_overwrite_ok=True) # 创建工作表
col = ('信息')
for i in range(0,1):
worksheet.write(0,i,col)
for i in range(0,4):
m=i+1
for j in range(0,50):
print('第%d条'%(j+1))
# print(len(datalist[0][0]))
data[j] = datalist[i][0][j]
print(data[j])
for j in range(0,50):
n = 0
if n%5 == 0:
m+=1
n = 0
worksheet.write(m,n,data[j])
n+=1
workbook.save('信息.xls') #保存数据
print('爬取完毕!')
后面操作有些繁琐是为了对Excel表格进行格式操作,若读者感觉麻烦可以不进行此操作,直接保存即可
大致框架为:
def saveData(datalist,savepath):
workbook = xlwt.Workbook(encoding="gbk",style_compression=0) # 创建workbook对象
worksheet = workbook.add_sheet('信息',cell_overwrite_ok=True) # 创建工作表
col = ('信息')
for i in range(0,1):
worksheet.write(0,i,col[i])
for i in range(0,50):
print('第%d条'%(i+1))
data = datalist[i]
for j in range(0,1):
worksheet.write(i+1,j,data[j])
workbook.save('信息.xls') #保存数据
print('爬取完毕!')
OK,那么到这里就爬取完成了,有兴趣的读者可自行深入研究。