php登录抓取网页指定内容(Excel表存储数据利用Python库xlwt将抽取的数据写入Excel表格)
优采云 发布时间: 2022-01-21 04:14php登录抓取网页指定内容(Excel表存储数据利用Python库xlwt将抽取的数据写入Excel表格)
解析页面内容使用BeautifulSoup定位特定标签位置使用正则表达式查找特定内容标签解析
BeautifulSoup 提供 Python 中的函数来处理导航、搜索、修改解析树等,并为用户提供解析文档需要抓取的数据。
soup = BeautifulSoup(html,"html.parser")
for item in soup.find_all('div',class_="item")
创建一个Beautiful Soup对象,html为页面内容,html.parser为页面解析器
找到能完整提取视频内容的item,即页面中所有style为item类的div
正则表达式
Python中使用re操作正则表达式
使用正则表达式预先定义一些特定的字符串和特定字符的组合,形成规则字符串来过滤字符串。
用于存储数据的 Excel 表
使用 Python 库 xlwt 将提取的数据写入 Excel 表
首先创建一个 utf-8 编码的 Excel 对象
接下来,创建一个工作表
然后将内容写入单元格
最后保存表格
抢top250
导入相关库
from bs4 import BeautifulSoup #网页解析,获取数据
import re #正则表达式,进行文字匹配
import urllib.request,urllib.error #制定URL,获取网页数据
import xlwt #进行Excel操作
定义主函数
def main():
baseurl ="https://movie.douban.com/top250?start="
datalist = getData(baseurl) #1.爬取网页
savepath = ".\\豆瓣电影TOP250.xls"
saveData(datalist,savepath) #3.保存数据
使用正则表达式制定获取文本内容的规则
#获取影片链接规则
findlink = re.compile(r'<a href="(.*?)">') #创建正则表达式对象,表示规则,即字符串的模式
#获取影片图片
findimage =re.compile(r'',re.S) #re.s 让换行符包含在字符中
#影片片名
findtitle = re.compile(r'(.*)')
#影片评分
findrating = re.compile(r'(.*)')
#评价人数
findjudge = re.compile(r'(.*)人评价')
#影片概况
findthing = re.compile(r'(.*)')
#影片相关内容
findbd = re.compile(r'<p class="">(.*?)',re.S)</p>
爬网
def getData(baseurl):
datalist = []
for i in range(0,10):
url = baseurl +str(i*25)
html = askURl(url) #保存获取到的网页源码
一个一个地解析数据
保存数据
def saveData(datalist,savepath):
print("save")
book = xlwt.Workbook(encoding="utf-8",style_compression=9) #创建workbook对象
sheet = book.add_sheet("豆瓣电影TOP250") #创建工作表
colum = ("电影详情链接","图片链接","中文名","外国名","评分","评价人数","概况","相关信息")
for i in range(0,8):
sheet.write(0,i,colum[i]) #列名
for i in range(0,250):
print("第%d条"%(i+1))
data = datalist[i]
for j in range(0,8):
sheet.write(i+1,j,data[j])
book.save("TOP250.xls")
得到指定一个URL的网页内容
def askURl(url):
head ={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.6241 SLBChan/11"}
request = urllib.request.Request(url,headers=head)
html = ""
try:
response = urllib.request.urlopen(request)
html = response.read().decode("utf-8")
except urllib.error.URLError as e:
if hasattr(e,"code"):
print(e.code)
if hasattr(e,"reason"):
print(e.reason)
return html
你还是得伪装,否则你会被识破的。
实施
#当程序执行时
if __name__=="__main__":
main() #调用函数
笔记
爬豆瓣的整体工作已经完成,但是细节还需要多练习,可以进一步完善。