基础爬虫主要使用以下几个库,可以直接冲anacada中调用,其中re和urlib两个库python3.9以上自带不需要在安装
from bs4 import BeautifulSoup #正则表达式,进行文字匹配
import re #网页解析,获取数据
import urllib.request #制定URL,获取网页数据
import urllib.error
import xlwt
#import sqlite3
def askurl(url):#模拟本机ID向豆瓣发送请求
head = {#模拟浏览器头部,向豆瓣发送信息
"User-Agent":"Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 84.0.4147.89 Safari / 537.36"
}
#用户代理,表示告诉豆瓣告诉我们是什么类型的机器。本质上告诉浏览器,我们可以接受什么信息。
request = urllib.request.Request(url,headers=head)
html=''
try:
response = urllib.request.urlopen(request)
html= response.read().decode("utf-8")
#print(html)
except urllib.error.URLError as e :
if hasattr(e,"code"):
print(e.code)
if hasattr(e,'reason'):
print(e.reason)
return html
#爬取网页
def getDate(baseurl):
datalist=[]
url=baseurl
html=askurl(url)
'''for i in range(0,10):#调用获取页面信息的函数,10次
url=baseurl+str(i*25)
html=askurl(url)#保存获取的源码'''
#逐一解析数据
soup=BeautifulSoup(html,'html.parser')
for item in soup.find_all("div",class_="card-body"):#查找符合要求的字符串形成列表
#print(item)#测试查看电影item
date = [] #保存一部电影的信息
item = str(item)
#print(type(item))
#获取影片超链接
link = re.findall(findlink,item)
#print(link)
date.append(link)
titles=re.findall(findname, item)
date.append(titles)
#print(titles)
datalist.append(date)
#print(datalist)
#print(link)
return datalist
def saveDate(datalist,savepath):#保存数据
book=xlwt.Workbook(encoding='utf-8',style_compression=0)
sheet = book.add_sheet('羞羞导航',cell_overwrite_ok=(True))
col = ('详情链接','导航名称')#,'影片中文名称','外国名称','评分','评价数','概况',)#'相关信息')
for i in range(0,2):
sheet.write(0,i,col[i])#列名
for i in range(0,50):
print('这是第%d条'%(i+1))#多少行
data = datalist[i]
for j in range(0,2):
sheet.write(i+1,j,str(data[j]))
book.save(savepath)#保存'''
完整代码如下
from bs4 import BeautifulSoup
import re
import urllib.request
import urllib.error
import xlwt
#import sqlite3
findlink=r'<a class="site-item" href="(.*?)" target="_blank" title.*?'
findname=r'<span class="name">(.*?)</span>'
#findname=r'<span class="name">(.*?)</span>' #创建正则表达式规则
'''findimgsrc=re.compile(r'<img.*src="(.*?)"',re.S)#让r中包含所以字符,让换行符也考虑在内
findrate=re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
findjudg=re.compile(r'<span>(d*)人评价</span>')
findbd=re.compile(r'<p class="">(.*)</p>',re.S)
findsumm=re.compile(r'<span class="inq">(.*)</span>')#概况summary'''
def main():
#findlink = re.compile(r'<a href="(.*?)">') #创建正则表达式规则
baseurl='https://9sedh.com/'
datalist=getDate(baseurl)
savepath=r'羞羞导航.xls'
askurl('https://9sedh.com/')
saveDate(datalist,savepath)
#爬取网页
def getDate(baseurl):
datalist=[]
url=baseurl
html=askurl(url)
'''for i in range(0,10):#调用获取页面信息的函数,10次
url=baseurl+str(i*25)
html=askurl(url)#保存获取的源码'''
#逐一解析数据
soup=BeautifulSoup(html,'html.parser')
for item in soup.find_all("div",class_="card-body"):#查找符合要求的字符串形成列表
#print(item)#测试查看电影item
date = [] #保存一部电影的信息
item = str(item)
#print(type(item))
#获取影片超链接
link = re.findall(findlink,item)
#print(link)
date.append(link)
titles=re.findall(findname, item)
date.append(titles)
#print(titles)
datalist.append(date)
#print(datalist)
#print(link)
return datalist