参考文档
百度云分享
链接:https://pan.baidu.com/s/1D-NS3oNBIaMNmyu4LykAAw
密码:4bq5
F12 进入开发者工具,在Elements下找到需要的数据位置
· 第一行行需要加入#coding=utf-8
这样可以在代码中包含中文
· main函数用于测试
if __name__=="__main__":
·添加#为注释
impor sys
from bs4 import BeautifulSoup
import re
import urllib
import xlwt
主流程
main()
print("爬取完成,请查看.xls文件")
def main():
print("开始爬取.....")
baseurl='网址'
datalist=getData(baseurl)
savepath=u'存储excel地址'
saveData(datalist,savepath)
·使用urllib2库获取页面
for i in range(0,10):
url=baseurl+str(i*25)
html=askURL(url)
·#得到页面全部内容
def askURL(url):
request=urllib.request.Request(url)#发送请求
try:
response=urllib.request.urlopen(request)#取得响应
html=response.read()#获取网页内容
print(html)
except urllib.error.URLError as e:
if hasattr(e,"code"):
print(e.code)
if hasattr(e,"reason"):
print(e.reason)
return html
·使用beautifulsoup定位特定的标签位置
·使用正则表达式找到具体的内容
soup=Beautifulsoup(heml,"html.parser")
for item in soup.find_all('div',class_='item'):#找到每一个影片项
data=[]
item=str(item)#转化成字符串
#影片详情链接
link=re.findall(findlink,item)[0]
data.append(link)#添加详情链接
imgsrc=re.findall(findimgsrc.item)[0]
data.append(imgsrc)#添加图片链接
titles=re.findall(findtitle,item)
#片名可能只有一个中文名,没有外国名
if(len(titles)==2);
ctitle=titles[0]
data.append(ctitle)#添加中文片名
otitle=titles[1].replace("/","")#去掉无关符号
data.append(otitle)#添加外国片名
else:
data.append(titles[0])#添加中文片名
data.append(' ')#留空
rating=re.findall(findrating,item)[0]
data.append(rating)#添加评分
judgenum=re.findall(findjudge,item)[0]
data.append(judgenum)#添加评论人数
inq=re.findall(findinq,item)
#可能没有情况
if len(inq)!=0:
inq=inq[0].replace("。","")#去掉句号
data.append(inq)#添加概况
else:
data.append(' ')#留空
bd=re.findall(findBd,item)[0]
bd=re.sub(remove,"",bd)
bd=re.sub('
(\s+)?'," ",bd)#去掉
bd=re.sub('/'," ",bd)#替换
data.append(bd.strip())
datalist.append(data)```
# 5保存数据
savepath=u’存储excel地址’
savedata(datalist,savepath)
``
调用
#将相关数据写入excel中
def savedata(datalist,savepath):
book=xlwt.workbook(encoding='utf-8',style_compression=0)
sheet=book.add_sheet('豆瓣电影Top250',cell_overwrite_ok=true)
col=('电影详情链接','图片链接','影片中文名','影片外国名','评分',
'评价数','概况','相关信息')
for i in range(0,8):
sheet.write(o,i,col[i])#列名
for i in range(0,250):
data=datalist[i]
for j in range(0,8):
sheet.write(i+1,j,data[j])#数据
book.save(savepath)#保存
```